查詢演算法 二分查詢

2021-10-03 19:06:01 字數 916 閱讀 4169

二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下:

例:

有乙個數列: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...