思路
- 假設表中元素是按升序排列,將 表中間位置記錄的關鍵字 與 查找關鍵字 比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表 分成前、後兩個子表 ,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重複以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。
- 數據必須採用順序存儲結構,而且表中元素按關鍵字有序排列
代碼
#include <iostream>
using namespace std;
int BinSearch(int *list, int n, int x);
int main(){
int a[] = {0,1,2,3,4,5,6,7,8,9};
int len = sizeof(a)/ sizeof(a[0]);
int result;
int num = 4;
result = BinSearch(a, len, num);
cout << result << endl;
return 0;
}
int BinSearch(int *list, int n, int x){
int low, mid, high;
low = 0, high = n-1;
while(low<=high){
mid = (low+high)/2;
if (x == list[mid]){
return mid;
}
else if (list[mid]>x){
high = mid-1;
}
else if (list[mid]<x){
low = mid+1;
}
}
return -1;
}
// 輸出
// 4