計算機演算法設計與分析<王曉東編著> 2-2二分查詢 演算法分析
阿新 • • 發佈:2020-12-03
使用二分查詢法的前提:陣列元素有序排列。
查詢思想類似於分治思想。每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為 0或 -1 返回-1。
注意到二分查詢針對的必須是已經排序過的有序陣列,否則不能使用該演算法。設查詢的元素為x。
二分查詢的基本思想:
- 將n個元素分為大致相同的兩個部分[left,mid-1]和[mid+1,right]
-
- 如果x==a[mid] 返回中間值索引
- 如果x < a[mid] right = mid -1 ; 在陣列的左半部分繼續查詢
- 如果x > a[mid] left = mid + 1; 在陣列的右半部分
- 直到陣列長度不再大於0 或 找到元素x返回索引值。
如在陣列中查詢元素’10’
又如在陣列中查詢’19’
程式碼實現(C++)遞迴
template <typename T> int BinarySearch(T a[], const T& x, int l, int r) { if (l <= r) { int mid = l + (r - l) / 2; if (a[mid] == x) { return mid; } else { if (a[mid] < x) { return BinarySearch(a, x, mid + 1, r); } else { return BinarySearch(a, x, l, mid - 1); } } } else { return -1; } }
程式碼實現(C++)非遞迴
template <typename T>
int BinarySearch(T a[], const T& x, int n) {
int l = 0, r = n - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (a[mid] == x)
return mid;
if (a[mid] > x)
r = mid - 1;
else
l = mid + 1;
}
return -1;
}