Java二分查找代码案例

 

 

第一种写法

public static int binarySearch(Integer[] srcArray, int des) {

    //定义初始最小、最大索引

    int low = 0;

    int high = srcArray.length - 1;

    //确保不会出现重复查找,越界

    while (low <= high) {

        //计算出中间索引值

        int middle = (high + low)>>>1 ;//防止溢出

        if (des == srcArray[middle]) {

            return middle;

        //判断下限

        else if (des < srcArray[middle]) {

            high = middle - 1;

        //判断上限

        else {

            low = middle + 1;

        }

    }

    //若没有,则返回-1

    return -1;

}

第二种写法:

public int find (long[] strs , long searchKey) {
        int lowerBound = 0;
        int upperBound = strs.length -1;
        int curInt;
        while (true) {
            curInt = (upperBound - lowerBound)/2;
            if (strs[curInt]==searchKey) {
                return curInt;
            } else if (lowerBound>upperBound){
                return strs.length;
            } else {
                if (strs[curInt] < searchKey) {
                    lowerBound =curInt+1;
                }else {
                    upperBound=curInt-1;
                }
            }
        }
    }

转载于:https://my.oschina.net/u/3134960/blog/2876930

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值