while 循环不会以迭代二分查找结束

While loop doesnt end in iterative binary search

我目前正在编写一个二进制搜索,它使用迭代而不是递归并且它不返回任何内容。我已经调试到 while 循环没有结束,但我似乎无法弄清楚我哪里出错了。

代码如下:

public static <E extends Comparable> boolean binarySearchIterative(E[] array, E obj) {
    int first = 0;
    int last = array.length - 1;
    while(first <= last) {
        int middle = (first + last) / 2;
        if(array[middle].equals(obj)) return true;
        else if(obj.compareTo(array[middle]) < 0) first = middle - 1;
        else first = middle + 1;
    }
    return false;
}

是的,我的清单是有序的 ;)

在第二个 else if 部分你需要设置 last 而不是 first -

else if(obj.compareTo(array[middle]) < 0) last = middle - 1;