二分法的两种写法

举报
一条coding 发表于 2021/10/19 23:15:05 2021/10/19
【摘要】 1.循环写法 public static int rank(int key,int nums[]) {     //查找范围的上下界     int low=0;     int high=nums.length-1;    ...

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.递归写法


  
  1. public static int search1(int num,int low,int high,int a[]) {
  2. int middle = (high+low) / 2;
  3. while(low<=high){
  4. //注意等号要有
  5. if(a[middle]>num){
  6. return search1(num, low, middle-1, a);
  7. }else if(a[middle]<num){
  8. return search1(num, middle+1, high, a);
  9. }
  10. else{
  11. return middle;
  12. }
  13. }
  14. return-1;
  15. }

文章来源: blog.csdn.net,作者:一条coding,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/skylibiao/article/details/81167757

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。