目錄
- 1. 若在線性表中採用折半查找法查找元素,該線性表應該:
- 2. 設一個順序有序表A[1:14]中有14個元素,則採用二分法查找元素A[4]的過程中比較元素的順序爲()。
- 3. 下面關於查找算法的論述中哪個不是正確的?
- 4. 採用二分查找方法查找長度爲n的線性表時,每個元素的平均值查找長度爲()。
- 5. 在有序表(12,24,36,48,60,72,84)中二分查找關鍵字72時所需進行的關鍵字比較次數是多少?
- 6. 用二分法查找長度爲10的、排好序的線性表,查找不成功時,最多需要比較多少次?
- 已知有序序列b c d e f g q r s t,則在二分查找關鍵字b的過程中,先後進行比較的關鍵字依次是多少?()
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