二分查詢 Binary Search

2021-09-12 13:07:52 字數 1172 閱讀 8683

二分查詢是從有序陣列中的中間位置開始查詢特定元素的演算法,又稱折半查詢

演算法流程:

從有序陣列的中間位置開始與給定元素進行比較。

若二者相等,則返回下標。

若不相等,則在大於或小於給定元素的那一半陣列中重複以上步驟。

若在某一步陣列為空,表明查詢失敗。

每次比較,陣列長度n減小一半,所以二分查詢的時間複雜度為o(logn)

問題描述:從有序陣列中查詢value,存在返回下標,不存在返回-1。

1.1 非遞迴

int

binarysearch

(vector<

int> array,

int value)

else

if(array[midlle]

< value)

else

return middle;

}return-1

;}

1.2 遞迴
int

binarysearch

(vector<

int>

& nums,

int target,

int l,

int r)

問題描述:從給定有序陣列中查詢第乙個等於value的元素,查詢成功返回下標,查詢失敗返回-1。

類似問題:

1.查詢第乙個不小於value的元素。

2.查詢第乙個大於value的元素。

即:stl中的lower_bound()和uppper_bound()。

找到了等於(大於)value的元素,記錄這個下標,繼續到相應的折半陣列中查詢,直到陣列為空。

int

binarysearch1

(vector<

int> array,

int value)

return array[right +1]

== value ? right +1:

-1;}

看array[middle]與value相等時往右還是往左。

STL中的二分查詢(binary search)

stl中對於有序序列 vector,list等 提供了相當相當強大的二分搜尋binary search演算法。對於可以隨機訪問容器 如vector等 binary search負載度為對數級別 logn 對於非隨機訪問容器 如list 則演算法複雜度為線性。現在簡要介紹一下幾種常用的binary s...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...