3.29·基础数据结构(Java)

二分查找

代码实现(基础版)

    // 左闭右闭
    public static int BinarySraechBasic(int[] arr, int target){
        int left = 0 ; int right = arr.length-1;
        while(left <= right){
            // 如果出现比较大的left和right的时候 两个加和就可能超过int最大值
            // int middle = (left+right)/2;
            int middle = (left+right) >>> 2;
            if(target < arr[middle]){
                right = middle-1;
            }
            else if(arr[middle] < target){
                left = middle+1;
            }
            else{
                return middle;
            }
        }
        return -1;
    }

注意事项  

问题一:如果写成i < j 的话就会出现最后一个i = j 的元素没有被判断是否为target

问题二:如果left和right加和超过int最大值的话 最后返回一个负数哦 所以要用右移运算符

问题三:更加方便看到大小关系哦

改动版(right作为一个边界而已) 

    // 更常用
    // 左闭右开
    public static int BinarySraech(int[] arr, int target){
        int left = 0 ; int right = arr.length;
        while(left < right){
            // 如果出现比较大的left和right的时候 两个加和就可能超过int最大值
            // int middle = (left+right)/2;
            int middle = (left+right) >>> 2;
            if(target < arr[middle]){
                right = middle;
            }
            else if(arr[middle] < target){
                left = middle+1;
            }
            else{
                return middle;
            }
        }
        return -1;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值