演算法導論 查詢 二分查詢

2022-07-05 15:24:12 字數 1761 閱讀 3595

二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為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 template2

int sub_binary_search(vectora,int low,int high,t value)//

遞迴子程式實現

3

2)非遞迴c++實現

1 template2

int binary_search_nor(vectora,t value)//

非遞迴實現316

//沒找到

17return -1

;18 }

search.h

#ifndef search_hh

#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

主函式:search.cpp

1 #include 2 #include 3

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 };

output(輸出):

演算法導論 2 3 5 二分查詢

1 二分查詢 binary search 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且表的儲存結構為順序結構。不妨設有序表是遞增有序的。2 二分查詢的基本思想 二分查詢演算法思想 1 首先確定該區間的中點位置 mid left righ...

查詢演算法 二分查詢

利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...

查詢演算法 二分查詢

二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...