int binary(int, int *, int , int );
int a[N]={2,4,5,7,8,9,11,15,16,17};
int main()
{
int i,j,x,y;
cin >> x;
if ((y=binary(x,a[],i))==0) {j=i; cout << "X Position is " << i;}
else {j=i+1; cout << "X between " << i << " and " << j;}
cout << endl;
}
int binary(int x, int* array, int &pos)
{
int left=0;
int right = N-1;
while (left<right)
{
int mid = (left+right)/2;
if (x < array[mid]) right = mid;
else if (x > array[mid]) left=mid;
else { pos=i ; return 0;}
}
pos=right;
return -1;//找不到时
}
不用改写算法
int binary(int K, int* array, int left, int right) {
int l = left-1;
int r = right+1;
while (l+1 != r) {
int i = (l+r)/2;
if (K < array[i]) r = i;
if (K == array[i])
return i;
if (K > array[i]) l = i;
}
//找不到时,l,l+1就是你想要的位置(以0开始)
return l;
}