int binary_search(int *ary,int size,int dst)
{
if(null==ary||size==0)
return -1;
//if(ary[0]==dst)return 0;
//if(ary[size-1]==dst)return size-1;
int left=0;
int right=size-1;
int mid;
<span style="white-space:pre"> </span>int res=-1;
while(left<=right)
{
mid=left+((right-left)>>1);
if(dst<ary[mid])
{
right=mid-1;
}else if(dst>ary[mid])
{
left=mid+1;
}
else{ res=mid;break;}
}
<span style="white-space:pre"> </span>if(left>right)
<span style="white-space:pre"> </span>return -1;
return res;
}
递归版本
int binary_search_recursive(int *ary,int left,int right,int dst)
{
if(null==ary)return -1;
if(left<=right){
int mid=left+((right-left)>>1);
if(dst==ary[mid])return mid;
else if(dst<ary[mid])return binary_search_recursive(ary,left,mid-1,dst);
else return binary_search_recursive(ary,mid+1,right,dst);
}
return -1;
}
问题
1,给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在则返回-1。
2,给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在则返回-1。
3,给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1。
4,给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在则返回-1。
5,给定一个有序(不降序)数组arr,求最小i使得arr[i]大于v,不存在则返回-1。
http://blog.csdn.net/insistgogo/article/details/7768947
http://blog.csdn.net/zzj1881/article/details/7346751