1、二分查詢(binary search)
二分查詢又稱折半查詢,它是一種效率較高的查詢方法。
二分查詢要求:線性表是有序表,即表中結點按關鍵字有序,並且表的儲存結構為順序結構。不妨設有序表是遞增有序的。
2、二分查詢的基本思想
二分查詢演算法思想:
(1)首先確定該區間的中點位置: mid = ( left + right ) / 2;
(2)然後將待查的k值與r[mid].key比較,若相等,則查詢成功並返回此位置;否則須確定新的查詢區
間,繼續二分查詢,具體方法如下:
① 若r[mid].key>k,則由表的有序性可知r[mid..n].keys均大於k,因此若表中存在關鍵字等於k
的結點,則該結點必定是在位置mid左邊的子表r[1..mid-1]中,故新的查詢區間是左子表
r[1..mid- 1]。
② 類似地,若r[mid].key
右子表r[mid+1..n]。下一次查詢是針對新的查詢區間進行的。
因此,從初始的查詢區間r[1..n]
開始,每經過一次與當前查詢區間的中點位置上的結點關鍵字的比較,就可確定查詢是否成功,
不成功則當前的查詢區間就縮小一半。這一過
程重複直至找到關鍵字為k的結點,或者直至當前
的查詢區間為空(即查詢失敗)時為止。
3、二分查詢演算法**
迭代實現:
int binary_search(int a, elementtype key, int p, intr )
return -1
; }
遞迴實現:
int binary_search( int a, elementtype key, int p, intr )
return -1
;}
注:
1、二分的實現難點主要在於邊界的判定上,在上面的演算法中,實現陣列區間a[p....r]的查詢,遞迴與迭代的結束條件需要注意。
2、注意溢位問題。
3、若陣列中含有重複元素,在查詢該重複元素時會返回其中乙個的下標,不確定是其中哪個。
四、時間複雜度分析
二分查詢為分治法,其時間複雜度為o( logn )
演算法導論 查詢 二分查詢
二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為o n 但二分查詢演算法則更優,因為其查詢時間為o lgn 譬如陣列,查詢元素6,用二分查詢的演算法執行的話,其順序為 1.第一步查詢中間元素,即5,由於...
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...
查詢演算法 二分查詢
二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...