二分的本質:對於一組有序的資料,進行不斷地折半查詢
這裡以陣列為例說明情況
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 對...