1.递归实现
#include<iostream>
using namespace std;
int find(int *a, int low, int high, int x){
if (low > high)
return -1;
int mid = (low + high) / 2;
if (a[mid] == x)
return mid;
if (x < a[mid])
return find(a, low, mid-1, x);
else
return find(a, mid+1, high, x);
}
int binary_Search(int *a, int length, int x){
return find(a, 0, length - 1, x);
}
int main(){
int a[] = { 0,1, 2, 3, 4, 5, 6, 7, 8 };
cout << binary_Search(a, 9, -1);
}
2非递归
#include<iostream>
using namespace std;
int binary_Search(int *a, int length, int x){
int low = 0, high = length - 1;
int mid;
while (low <= high){
mid = (low + high) / 2;
if (x == a[mid])
return mid;
if (x < a[mid])
high = mid - 1;
if (x>a[mid])
low = mid + 1;
}
return -1;
}
int main(){
int a[] = { 0,1, 2, 3, 4, 5, 6, 7, 8 };
cout << binary_Search(a, 9, 8);
}