二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為o(n).但二分查詢演算法則更優,因為其查詢時間為o(lgn),譬如陣列,查詢元素6,用二分查詢的演算法執行的話,其順序為:
1.第一步查詢中間元素,即5,由於5<6,則6必然在5之後的陣列元素中,那麼就在中查詢,
2.尋找的中位數,為7,7>6,則6應該在7左邊的陣列元素中,那麼只剩下6,即找到了。
二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和goal進行比較。binary_search(a,low,high,value)
if high
then return -1
mid
if a[mid]>value
then return binary_search(a,low,mid-1,value)
else if a[mid]
then return binary_search(a,mid+1,high,value)
else return mid
1 template22)非遞迴c++實現int sub_binary_search(vectora,int low,int high,t value)//
遞迴子程式實現
3
1 template2search.hint binary_search_nor(vectora,t value)//
非遞迴實現316
//沒找到
17return -1
;18 }
#ifndef search_hh主函式:search.cpp#define search_hhtemplate
class
search;
template
int search::binary_search_div(vectora,t value )//
遞迴實現
template
int search::sub_binary_search(vectora,int low,int high,t value)//
遞迴子程式實現
template
int search::binary_search_nor(vectora,t value)//
非遞迴實現
//沒找到
return -1;}
#endif
1 #include 2 #include 3output(輸出):using
namespace
std;
4 #include "
search.h"5
6int
main()7;
9 vector vec(a,a+9
);10 searchsea_vec;
11 cout<3)/
index從0開始
12 cout<4)<
13 cout<0)/
index從0開始
14 cout<10)<
15 system("
pause");
16return0;
17 };
演算法導論 2 3 5 二分查詢
1 二分查詢 binary search 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且表的儲存結構為順序結構。不妨設有序表是遞增有序的。2 二分查詢的基本思想 二分查詢演算法思想 1 首先確定該區間的中點位置 mid left righ...
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...
查詢演算法 二分查詢
二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...