二分查詢有序陣列

2022-03-27 00:54:49 字數 1906 閱讀 2464

對於乙個有序字串陣列,用二分法查詢某一字串是否存在於該字串陣列中。函式原型為:

bool binarysearch(const vector& array, const

string& target)

注意這裡的有序指的是字典序,如字串陣列 a, ab, ac, bc, cd, d 就是有序字串陣列,而 a, b, ab 及 a, ac, ab 都不是有序字串陣列。

對於這道題,一種很笨的做法是:

1 #include 2 #include 3 #include 

4 #include 5 #include 6

using

namespace

std;78

bool binarysearch(const vector& array, const

string&target);

9int getupperbound(const vector& array, const

string& target, int index, int low, int

high);

10int getlowerbound(const vector& array, const

string& target, int index, int low, int

high);

1112

intmain() 13;

15string target;

1617

bool ret =binarysearch(vec, target);

1819

return0;

20}2122

bool binarysearch(const vector& array, const

string&target)

2335

else

3648

49if (array[low] ==target)

50return

true;51

}5253return

false;54

}5556int getupperbound(const vector& array, const

string& target, int index, int low, int

high)

5769

70return

high;71}

7273

74int getlowerbound(const vector& array, const

string& target, int index, int low, int

high)

7589

90return

low;

91 }

view code

而另一種方法則要簡潔得多:

1 #include 2 #include 3 #include 

4using

namespace

std;56

bool binarysearch(const vector& array, const

string&target);78

intmain() 9;

11string target;

1213

bool ret =binarysearch(vec, target);

1415

return0;

16}1718

bool binarysearch(const vector& array, const

string&target)

1931

else

3244}45

46return

false

;47 }

二分查詢(基於有序陣列)

採用一對平行的陣列,乙個儲存鍵乙個儲存值 實現的核心是rank 方法,它返回表中小於給定鍵的鍵的數量。二分查詢法 將被查詢的鍵和子陣列的中間鍵比較。如果被查詢的鍵小於中間鍵,就在左子陣列中繼續查詢,如果大於就在右子陣列中繼續查詢,否則中間鍵就是我們要找的鍵。實現 rank 採用了二分查詢法,rank...

有序陣列的二分查詢

給出乙個有序陣列 公升序 以及指定的數值。返回指定數值在陣列中的下標 若不存在則返回 1 在傳入的公升序陣列arr中查詢是否有元素值與給定的number相等。param arr 有序陣列 公升序 param number 指定的數值 return 指定數值在該陣列中的下標值。返回 1表示不存在 st...

迴圈有序陣列二分查詢

演算法描述,乙個有序的陣列,從開始到中間擷取一段陣列放到陣列的尾部,這個陣列會變成迴圈有序的陣列,在這個迴圈有序的陣列中進行二分查詢 例如 1,2,3,4,5,6,7,8,9 擷取前4位放到尾部會變成5,6,7,8,9,1,2,3,4 變成迴圈有序的陣列 演算法實現 採用二分查詢的方式,獲取中間的乙...