標準庫中二分查詢演算法

2021-07-15 03:02:05 字數 1046 閱讀 1901

標準庫中二分搜尋演算法:每個演算法都提供兩個版本,第乙個版本用元素型別的小於運算子(<)來檢測元素,第二個版本則使用給定的比較操作。給定的比較操作可以是函式物件、lambda表示式、定義函式呼叫操作符類的物件。lower_bound(beg, end, val);

lower_bound(beg, end, val, comp);

返回乙個迭代器,表示第乙個大於等於val的元素,如果不存在這樣的元素,則返回end。
upper_bound(beg, end, val);

upper_bound(beg, end, val, comp);

返回乙個迭代器,表示第乙個大於val的元素,如果不存在這樣的元素,則返回end。
equal_range(beg, end, val);

equal_range(beg, end, val, comp);

返回乙個pari對,其中first成員是lower_bound返回的迭代器,second成員是upper_bound返回的迭代器。
example:給定乙個數字,求該數字在有序陣列中出現的次數。

方法一:我們可以使用標準庫equal_range演算法,因為該演算法返回乙個pair對,其中first指向第乙個大於等於val的位置,而second則指向第乙個大於val的位置,如果陣列中有多個val則second減去first就是重複元素的個數,如果陣列中不存在在這樣的val,則second和first指向相同的位置,兩者想減為零。int getnumberofk(vectordata, int k)

方法二:我們可以找到首次出現val值的位置,然後從當前位置開始向後遍歷,直到第乙個不等於val值的位置位置,兩個位置想減就是元素val出現的次數。
int getnumberofk(vectordata, int k)

int sum = 0;

for (int i = last; i < data.size(); ++i)

else

}return sum;

}

python中二分查詢

二分查詢也稱折半查詢,它的效率較高。但是二分查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。寫二分查詢時有兩個方法,乙個是用遞迴,乙個不用遞迴。用遞迴的方法如下 coding utf 8 def binary search alist,item 二分查詢。遞迴法 n len ali...

Java中二分查詢

給定乙個陣列,我們要查詢當前資料在陣列中的位置,雖然可以使用迴圈乙個個遍歷,但是由於要使 執行時間盡可能的小,所以我們要採用二分法來查詢。先上 public class binarysearch else if k arr m else return 1 public static void mai...

STL中二分查詢

偶然遇到了一些問題,記錄一下 標頭檔案 include 1.binary search 查詢某個元素是否出現。函式原型 bool lower bound forwarditer first,forwarditer last,const tp val 函式功能 在陣列中以二分法檢索的方式查詢,若在陣列...