關於二分查詢的深入思考以及模板

2021-10-02 19:27:19 字數 1241 閱讀 4647

二分的本質:對於一組有序的資料,進行不斷地折半查詢

這裡以陣列為例說明情況

left =

0, right = n -

1while

(left <= right)

mid =

(left + right)/2

case

x[mid]

< t: left = mid +1;

x[mid]

= t: p = mid;

break

; x[mid]

> t: right = mid -1;

return

-1

1、左閉右開的正確**
int l =

0,r = n;

while

(l < r)

2、左閉右閉的正確**
int l =

0,r = n -1;

while

(l <= r)

記憶方法
左閉右閉:由於是閉,left <= right,	偏大,right = mid - 1	偏小,left = mid + 1

其中的right也需要按照要求來

左閉右開:由於是開,left < right, 偏大,right = mid 偏小,left - mid + 1

其中的right盡量不動

int left, right, middle;

l =-

1, r = n;

while

(l +

1!= r)

//宣告,我們使用的是right,所以我們else的情況,即當大於等於的情況應該歸為r的情況!!

if(r >= n || a[r]

!= value)

//如果最後出來的這個結果,r在陣列範圍之外,或者是並不為答案,那麼返回-1

r =-1

;return r;

不知道咋回事,咱用著就是錯的

經常用於解方程以及二分答案等問題

while

(r - l > eps)

else

}//這裡面,不需要考慮關於l和r的變化問題,直接變為mid即可

//綜上所述,我們永遠只使用上面的!!!

二分查詢模板

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。模板一當區間 l,r 的更新操作是r mid l mid 1 時,計算mid時不需要加1。int bsearch 1 in...

二分查詢模板

例如陣列中查詢乙個數 二分查詢的前提是整個陣列是有序的 模板 int a n int l 0,r n 1 int mid,key while l r 另外還有一些二分查詢函式 a.函式模板 binary search arr,arr size indx c.函式功能 在陣列中以二分法檢索的方式查詢,...

二分查詢模板

二分查詢模板總共有兩個 將區間分為 l,mid l,mid l,mid mid 1,r mid 1,r mid 1 r 時,如下 while l r else 將區間分為 l,mid 1 l,mid 1 l,mid 1 mi d,r mid,r mid,r 時,如下 while l r else 對...