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.youkuaiyun.com/insistgogo/article/details/7768947
http://blog.youkuaiyun.com/zzj1881/article/details/7346751
本文详细介绍了二分查找算法的实现,包括迭代和递归两种方式,并探讨了如何针对不同的问题进行调整,例如寻找特定元素的第一个位置等。同时,还提到了旋转数组上的二分查找方法。
189

被折叠的 条评论
为什么被折叠?



