二分查找-死循环条件

149 阅读1分钟

错误代码如下:(死循环)

public static void main(String[] args)
    {
        int arr[] = {1, 2, 4, 5, 6};
        int refen = refen(arr, 3);
        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;
    }

条件

  • 循环条件 i ≤ j
  • 查找数值 不存在

满足上面条件就会产生死循环

步骤分析

arr[mid] = 4 > value = 3,所以j = mid;

然后 mid = (0 + 2) / 2 = 1

arr[mid] = 2 < value = 3,所以i = mid + 1;

然后 mid = (2 + 2) / 2 = 2

下面就成了死循环了,因为 mid = (i + j) / 2的值不会继续改变了

mid = (2 + 2) / 2 = 2

mid = (2 + 2) / 2 = 2

mid = (2 + 2) / 2 = 2