二分查詢也稱折半查詢(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中的前閉後開區間進行二分查詢,返回大於或等於...