考点精讲
1、查找
(1)顺序查找是一种最基本和最简单的查找方法。它的思路是,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查到所要找的元素为止。否则就是表中没有要找的元素,查找不成功。对于长度为n的有序线性表,在最坏情况下,顺序查找需要比较n次。
(2)对于大的线性表来说,顺序查找的效率是很低的。虽然顺序查找的效率不高,但在下列两种情况下也只能采用顺序查找:
①无序的线性表;
②即使是有序的线性表,如果采用链式存储结构,也只能顺序查找。
-21-(3)二分查找是针对有序表进行查找的简单、有效而又较常用的方法。其基本思想是:首先选择有序表中间位置的记录,将其关键字与给定关键字k进行比较,若相等,则查找成功;否则,若k值比该关键字值大,则要找的元素一定在表的后半部分(或称右子表),则继续对右子表进行二分查找;若k值比该关键字值小,则要找的元素一定在表的前半部分(左子表),同样应继续对左子表进行二分查找。每进行一次比较,要么找到要查找的元素,要么将查找的范围缩小一半。如此递推,直到查找成功或把要查找的范围缩小为空(查找失败)。
(4)显然,仅当有序线性表为顺序存储时才能用二分查找,并且,二分查找的效率要比顺序查找高得多。可以证明,对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次,而顺序查找需要比较n次。
2、排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。常用的排序方法(1)交换类排序法:
①冒泡排序法,需要比较的次数为n(n-1)/2;
②快速排序法,最坏情况需要比较的次数为n(n-1)/2。
(2)插入类排序法:
①简单插入排序法,最坏情况需要n(n-1)/2次比较;
②希尔排序法,最坏情况需要O(n1.5)次比较。
(3)选择类排序法:
①简单选择排序海最坏情况需要n(n-1)/2次比较;
②堆排序法,最坏情况需要O(nlog2n)次比较。
真题分析
【真题1】下列排序方法中,最坏情况下比较次数最少的是________。(2009年3月)
A)直接插入排序
B)堆排序
C)冒泡排序
D)简单选择排序
解析:冒泡排序、简单选择排序和直接插入排序法在最坏的情况下比较次数为:n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)
答案:B
【真题2】对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是________。(2008年4月)
A)直接插入排序
B)堆排序
C)快速排序
D)冒泡排序
-22-解析:排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、
快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序O(n^1.5)、简单选择排序n(n-1)/2、堆排序O(nlog2n)。
答案:B
【真题3】冒泡排序在最坏情况下的比较次数是________。(2007年9月)
A)n(n-1)/2
B)n/2
C)n(n+1)/2
D)nlog2n
解析:对n个结点的线性表采用冒泡排序,在最坏情况下,冒泡排序需要经过n遍的从前往后的扫描和(n-1)/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。
答案:A
【真题4】对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为__【1】__。(2006年4月)
解析:在冒泡排序中,最坏情况下,需要比较的次数为n(n-1)/2,也就是:
10*(10-1)/2=45。
答案:45
【真题5】对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是________。(2005年4月)
A)快速排序为n
B)快速排序为n(n-1)/2
C)冒泡排序为n/2
D)冒泡排序为n
解析:假设线性表的长度为n,在最坏情况下,冒泡排序和快速排序需要的比
较次数为n(n-1)/2。
答案:B
【真题6】在长度为n的有序线性表中进行二分法查找,最坏情况下需要比较的次数是________。(2008年9月)
A)O(log2n)
B)O(nlog2n)
C)O(n)
D)O(n)2
解析:对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需比较n次。
答案:A
-23-【真题7】在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为________。(2006年9月)
A)6
B)7
C)63
D)64
解析:在长度为64的有序线性表中,其中的64个数据元素是按照从大到小或从小到大的顺序排列有序的。在这样的线性表中进行顺序查找,最坏的情况就是查找的数据元素不在线性表中或位于线性表的最后按照线性表的顺序查找算法。
首先用被查找的数据和线性表的第一个数据元素进行比较,若相等,则查找成功,否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查找成功,否则,继续进行比较。依次类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。
因此,在长度为64的有序线性表中进行顺序查找,最坏的情况下需要比较64次。
答案:D
【真题8】下列数据结构中,能用二分法进行查找的是________。(2005年9月)
A)二叉链表
B)有序线性链表
C)顺序存储的有序线性表
D)线性链表
解析:二分查找只适用于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)的。
答案:C
【真题9】对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。(2005年4月)
A)n
B)n+1
C)log2n
D)n/2
解析:在长度为n的线性表中进行顺序查找,最坏情况下需要比较n次。
答案:A
【真题10】下列叙述中正确的是________。(2010年3月)
A)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)
B)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)
C)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n
D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)
解析:二分查找要求线性表中的结点必须按关键字值的递增或递减的顺序排序。它首先把要查找的关键字K与中间位置的结点关键字相比较,若相等,则查找成功;若不相等,则缩小范围。根据关键字与中间结点关键字的比较大小确定下一步查找哪个子表,这样一直递归下去,直到找到满足条件的结点或者确认表中没有这样的结点为止。对分查找即二分法查找,二分法查找只能适用于顺序存储的有序表。
答案:C
【真题11】在长度为n的线性表中,寻找最大项至少需要比较__【2】__次。(2010年9月)
解析:本题我们分两种情况说明:一种是无序的线性表。在这种情况下,要找n个数据中值最大的数据,应该要和其他所有元素进行一次比较才能确定其值是最大的。如果有一个元素没比较,那么也不能确定当前元素是值最大的元素,因此至少需要比较的次数是n-1次。另一种是有序的线性表,在这种情况下,不管是升序还是降序线性表,其最大值的位置都是确定的,无须比较。当然本题考查的应该是第一种情况,因此答案为n-1。
答案:n-1
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|