对于给定已排序数组的二分查找。
因为每次对比之后mid位置并可能是结果,所以进行相应的加减并不会跳过结果。
左值加1和右值减1也不会担心边界取不到的问题。
#include <iostream>
using namespace std;
int a[10]= {1,3,5,7,10,18,21,55,60,71};
int erfen(int zuo,int you,int key)
{
int l=zuo;
int r=you;
int mid=(l+r)/2;
while(l<=r)
{
if(key==a[mid])
return mid;
if(key>a[mid])
l=mid+1;
else
r=mid-1;
mid=(l+r)/2;
}
return -1;
}
int main()
{
int i;
while(cin>>i)
{
int pos=erfen(5,9,i);
cout<<pos<<endl;
}
return 0;
}