計算機-查找專項練習


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


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