二分查詢法(STL)詳解

2021-08-21 04:57:31 字數 1386 閱讀 4090

二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。

二分查詢要求:線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。

查詢過程:首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

舉例說明:假設有,要求查詢元素2在序列中的位置。

首先,找出序列中間元素為5,2比5小,則在5左邊的序列中繼續查詢;

這次中間元素為3,2仍比3小,繼續在3左邊的序列中查詢;

此次中間元素為2,與待查詢元素相同,停止查詢,返回目標元素的下標。

具體**如下:

int binarysearch(int a, int n, int k)

if (left > right)

return -1;

}

另一種函式遞迴的方法:

int binarysearch(int m, int n)

更新:

由於stl中有現成的函式可供我們使用,所以我們不必手寫二分,標頭檔案#include

lower_boudnd    //返回第乙個大於等於value的迭代器

upper_bound //返回第乙個大於value的迭代器

binary_search //如果存在value,返回true,否則返回false

下面的例子:

#include #include using namespace std;

int main()

; int n = lower_bound(a, a + 10, 7) - a;

int n1 = upper_bound(a, a + 10, 7) - a;

cout << n << endl;

cout << n1 << endl;

return 0;

}

結果是:

3

6

//查詢第乙個出現的位置

int a[8] = ;

int search(int x)

return l;

}//查詢最後乙個出現的位置

int search(int x)

return l;

}

STL二分查詢法

用binary search進行二分查詢 用法一 查詢區間為下標範圍為 n1,n2 的元素,下標為n2的元素不在查詢區間內在該區間內查詢等於 值 的元素,返回值為true 找到 或者false 沒找到 等於的含義不是簡單的 真實含義是 a等於b a用binary search進行二分查詢 用法二 查...

二分查詢法過程詳解

現在我們來玩乙個猜數的遊戲,假設有乙個人要我們猜0 99之間的乙個數。那麼最好的方法就是從0 99的中間數49開始猜。如果要猜的數小於49,就猜24 0 48的中間數 如果要猜的數大於49,就猜74 50 99的中間數 重複這個過程來縮小猜測的範圍,直到猜出正確的數字。二分查詢的工作方法類似於此。二...

stl 二分查詢

在stl中對二分查詢進行了封裝,有兩種 upper bound,lower bound。例如 pos lower bound a,a n,value 查詢value值在長度為n的陣列a中的位置 關於返回值,函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於...