二分查找

二分查找,(详细注解版)

网上的太复杂,写个简单点的自己理解

public class Test {
    public static void main(String[] args) {
        int [] arr={1,3,4,5,6,7};        //二分查找的数组都是有顺序的
        int i=9;                         //要查的数
        System.out.println(look(arr,i));  //打印所在下标,下标从0开始

    }

    public static  int look(int []arr,int i){
        int middle=0;                        //中间量
        int arr_legth=arr.length-1;          //查找的范围
        int low=0;                           //我可能出现的范围

        for (int j = 0; j < arr.length ; j++) {
             if (i==arr[j]){                    //如果匹配到数组的数组的数就继续往下走
                 break;
             }

             if (j==arr.length-1&&i!=arr[j]){    //如果数组的最后一个数还是没有匹配上就结束方法
                 return -1;
             }
        }

        while (low<=arr_legth){   // 我可能出现的位置,在数组范围内则为真

            middle=(arr_legth+low)/2;   // 中间量=我可能出现的位置+查找的范围/2

            if (arr[middle]==i){    // 假如值刚刚好在中间直接返回下标
               return middle;
            }

            if (i>arr[middle]){   // 查找数大于中间的数,我可能出现的范围就在中间量的右边
                low=middle+1;     //我可能出现的数值就等于中间量+1
            }

            if (i<arr[middle]){       // 查找数小于中间数查找的范围就在中间量的左边
                arr_legth=middle-1;   //查找的范围值-1
            }

        }
        return  middle;
    }
}

今天星期六本来想出去玩的,可是想到自己很快就要实习了,所以还是好好学习吧,希望也能够帮助你。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值