二分法的两种写法
1.循环写法
public static int rank(int key,int nums[])
{
//查找范围的上下界
int low=0;
int high=nums.length-1;
//未查找到的返回值
int notFind=-1;
while(low<=high)
{
//二分中点=数组左边界+(右边界-左边界)/2
//整数类型默认取下整
int mid=low+(high-low)/2;
//中间值是如果大于key
if(nums[mid]>key)
{
//证明key在[low,mid-1]这个区间
//因为num[mid]已经判断过了所以下界要减一
high=mid-1;
}else if(nums[mid]<key)
{
//证明key在[mid+1,high]这个区间
//同样判断过mid对应的值要从mid+1往后判断
low=mid+1;
}
else
{
//查找成功
return mid;
}
}
//未成功
return notFind;
}
2.递归写法
-
public static int search1(int num,int low,int high,int a[]) {
-
int middle = (high+low) / 2;
-
while(low<=high){
-
//注意等号要有
-
if(a[middle]>num){
-
return search1(num, low, middle-1, a);
-
}else if(a[middle]<num){
-
return search1(num, middle+1, high, a);
-
}
-
else{
-
return middle;
-
}
-
}
-
return-1;
-
}
文章来源: blog.csdn.net,作者:一条coding,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/skylibiao/article/details/81167757
- 点赞
- 收藏
- 关注作者
评论(0)