二分查找的思想:选取中间的值作为比较关键字,减少查找序列的长度,采用分而治之的思想,但必须是在数据有序的情况下使用二分查找
二分查找过程:取中间的值作为比较关键字,如果中间的arr[mid]==key,就返回mid,如果大于key,就在数据的左边区间查找,否则在右边区间查找
int find(int *arr,int n,int key)
{
int pos=-1;
if(arr==NULL ||n<0)
{
return pos;
}
int low=0;
int high=n-1;
while(low<=high)
{
int mid=(high-low+1)>>1+low;
if(arr[mid]==key)
{
while(mid>left&& arr[mid-1]==key) --mid;// 考虑越界和重复值
pos=mid;
break;
}
if(arr[mid]>key)
{
high=mid-1;
}
if(arr[mid]<key)
{
low=mid+1;
}
}
return pos;
}