java二分查找举例讨论

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java二分查找举例讨论相关的知识,希望对你有一定的参考价值。

最近做笔试题有这么一个关于二分查找的例子,有些疑惑。

给一个有序数组,和一个查找目标,用二分查找找出目标所在index,如果不存在,则返回-1-(其应该出现的位置),比如在0,6,9,15,18中找15,返回3;找10.则返回-4(-1-3)

实现如下:

public class Sulution1 {

    public static void main(String[] args)  {
        System.out.println(findBySep(2, new int[]{0,2,4,6,9}));    
    }

    public static int findBySep(int a, int[] arr){

        int high = arr.length-1;
        int low = 0;
        int mid = 0;
        while(high>low){
            mid = low+((high-low)>>1);
            if(a==arr[mid]) return mid;
            else if(a>arr[mid]) low = ++mid;
            else high = --mid;
        }
        
        return -1-(a>arr[mid]?++mid:mid);
    }

}

但结果返回的是-2,也就是-1-1,调试发现在执行二分查找时跳过了要查找的index,但逛了些博客翻了些书,二分查找的实现均大同小异,比较疑惑,难道是二分查找的实现本身有问题还是我的实现思路有问题?还请路过的英雄指点一二。

以上是关于java二分查找举例讨论的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

java泛型 二分查找

Java实现二分查找具体实现代码

Java二分查找算法复制粘贴直接用

二分查找+二分答案(Java)

二分查找及其Java代码实现