二分查找-改动版

64 阅读1分钟
public static void main(String[] args)
    {
        int arr[] = {1, 2, 3, 4, 5, 6};
        int refen = refen(arr, 5);
        System.out.println(refen);
    }
    private static int refen(int arr[], int value)
    {
        int i = 0, j = arr.length;
        int mid = 0;
        while(i < j)
        {
            mid = (i + j) >>> 1;
            if(value < arr[mid])
            {
                j = mid;
            }else if(arr[mid] < value)
            {
                i = mid + 1;
            }else
            {
                return mid;
            }
        }
        return -1;
    }

打印结果:

4

代码解释

如下代码中j的指向是一个不存在的数组元素,也就是越界了

为什么缩小j的边界时不是m - 1 呢?

j现在只作为一个边界它现在指向的一定不是查找目标

如果改为m - 1就意味着将来j再下次 m - 1 也就是4 -1 = 3它指向的这个13一定不是查找目标,这样就跟我们要查找的目标错过了。

j指向的会被错过,它只是作为边界