二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下:
例:
有乙個數列:12,23,45,56,67,89 請使用二分查詢找到56的位置
解:
首先mid=(0+5)/2=2;
arr[2]位置放的是45,56大於45,所以在56,67,89之間進行查詢,mid=(3+5)/2=4,arr[4]=67,這時67大於56,所以mid=(3+3)/2=3,arr[3]=56,成功找到56的位置,返回index=3
演算法實現如下:
void
halfsearch
(int arr,
int low,
int high,
int key)
else
if( key < arr[mid]
)else}if
(count1 ==0)
}void
main()
;halfsearch
(arr,0,
5,66)
;}
二分搜尋時間複雜度為:o(log2n)
因為二分查詢每次去掉一半的值,所以對於n個元素的情況:
一次二分剩下:n/2
兩次二分剩下:n/2/2 = n/4
…m次二分剩下:n/(2^m)
在最壞情況下是在排除到只剩下最後乙個值之後得到結果,即
n/(2^m)=1
所以由上式可得 : 2^m=n
故時間複雜度為: o(log2n)
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...
查詢演算法 二分查詢
二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...
查詢演算法 二分查詢
1 演算法介紹 1 序列必須是有序的 2 取序列的中間元素與查詢值比較,相等返回元素下標 3 根據序列公升序或降序,中間元素小於或大於查詢值的具體情況,選擇中間元素右邊或左邊的序列重複步驟 2 3 未找到返回 1。2 實現 2.1 golang package main import fmt fun...