计算机-查找专项练习


1. 若在线性表中采用折半查找法查找元素,该线性表应该:

A. 元素按值有序

B. 采用顺序存储结构

C. 元素按值有序且采用顺序存储结构

D. 元素按值有序且采用链式存储结构

答案解析

只有当线性表中数据元素按值大小有序排列,并且采用顺序存储结构时才能使用折半查找方法查找元素。即使线性表中数据元素按值大小有序排列,但采用的不是顺序存储结构(如链式),仍然不能够采用折半查找方法。


2. 设一个顺序有序表A[1:14]中有14个元素,则采用二分法查找元素A[4]的过程中比较元素的顺序为()。

A. A[1], A[2], A[3], A[4]

B. A[1], A[14], A[7], A[4]

C. A[7], A[3], A[5], A[4]

D. A[7], A[5], A[3], A[4]

答案解析

二分查找法的每次比较都与中间值进行比较
(1+14) / 2 = 7 --> 1~6
(1+6) / 2 = 3 --> 4~6
(4+6) / 2 = 5 --> 4~5
(4+5) / 2 = 4


3. 下面关于查找算法的论述中哪个不是正确的?

A.顺序查找需要查找表为有序表

B. 折半查找需要查找表为有序表

C. 查找表可以为静态查找表和动态查找表

D. 动态查找表的特点是表结构本身在查找过程中动态生成的

答案解析

顺序查找就是从头到尾一个一个比较,表中内容是否有序无所谓,反正都会浏览一遍直到找到为止

静态查找表:仅做查询和检索操作的查找表;
动态查找表:在查询之后,还需要将查询结果为不在查找表中的数据元素插入到查找表中;或者,从查找表中删除其查询结果为在查找表中的数据元素;
简而言之,动态查找表的结构是可以随时修改或变化的,表结构本身在查找过程中动态生成,一般而言链式结构有这个特征,比如二叉查找树、三棵B树等,另外,基于顺序存储的Hash查找应该也算动态查找表;而静态查找表的结构一次性生成后就不再允许改变,就像在有序数组上使用折半查找那样。


4. 采用二分查找方法查找长度为n的线性表时,每个元素的平均值查找长度为()。

A. O(n^2)

B. O(nlog2n)

C. O(n)

D. O(log2n)

答案解析

二分查找方法的思想:将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。
最好的情况是:待查关键字刚好位于序列中间,第一次即查到。
最坏的情况是:第一次查找,还剩下n/2个元素需要比较;第二次,还剩n/4……第i次查找,还剩下n/2i个元素需要比较,直到剩余最后一个元素,查找结束。
最后n/2i=1,即n=2i,i为查找的次数(长度),i=log2n,所以选D。


5. 在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数是多少?

A. 1

B. 2

C. 3

D. 4

答案解析

正确的二分查找应该是一次折半后,high=middle-1 或者 low=middle+1;
所以第一次查找时 high=6,low=0; middle= 0+6/2 = 3,即48;
第二次查找时 high=6, low =3+1; middle = 4+(6-4)/2 = 5,即72,查出所找关键字,故答案为B、2次


6. 用二分法查找长度为10的、排好序的线性表,查找不成功时,最多需要比较多少次?

A. 3

B. 4

C. 5

D. 6

答案解析

二分查找,可以用二叉判定树,查找不成功的次数不超过判定树的深度,即(log2n)+1,其中log2n向下取整。


已知有序序列b c d e f g q r s t,则在二分查找关键字b的过程中,先后进行比较的关键字依次是多少?()

A. f d b

B. f c b

C. g c b

D. g d b

答案解析

b c d e f g q r s t 二分查找,折半法
① low = 0,high = 9,mid = (low+ high)/2=4, ∴ 'b’比较a[4]=‘f’,<,找左边 ( b~e )
② low = 0,high = mid-1 = 3, mid = 3/2=1, ∴ 'b’比较a[1]=‘c’ , <,找左边(b~b)
③ low = 0,high = mid -1 = 0,mid = 0,∴ ‘b’ 比较a[0] = ‘b’,找到(若未找到,low=high,也停止查找)
所以比较的顺序就是f c b


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章