c 二分查詢模板

2021-10-20 19:54:09 字數 1270 閱讀 3533

一、查詢已遞增排序陣列a中大於等於(或者大於)給定target的第乙個元素的下標

//當eq_enable為true時  對應【大於等於】的情況

//當eq_enable為false時 對應【大於】的情況

intbinarysearch_ge_or_g

(vector<

int>

& a,

int target,

bool eq_enable)

else

}return ans;

}

//若ans等於a.size()說明沒有找到滿足條件的值

二、查詢已遞增排序陣列a中小於等於(或者小於)給定target的最後乙個元素的下標

//當eq_enable為true時  對應【小於等於】的情況

//當eq_enable為false時 對應【小於】的情況

intbinarysearch_le_or_l

(vector<

int>

& a,

int target,

bool eq_enable)

else

}return ans;

}

同樣,若ans等於a.size()說明沒有找到滿足條件的值。此外,**2和**1十分相似,可以對比學習

總結:

第一次看上面的**可能會覺得比較奇怪,多思考幾種不同的情形做遍歷就能夠熟悉了,核心思想為:

判斷mid是否滿足條件,和確定下乙個可疑區是[left,mid-1] 還是 [mid+1,right],經過不斷地重複mid判斷和可疑區長度減半,最終就能實現找點的功能了。

擴充套件

作為練習,感興趣的讀者可以試試實現一下以下兩個需求:

三、查詢已遞減排序陣列a中小於等於(或者小於)給定target的第乙個元素的下標

四、查詢已遞減排序陣列a中大於等於(或者大於)給定target的最後乙個元素的下標

二分查詢模板

二分查詢也稱折半查詢 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 對...