我目前正在编写一个二进制搜索,它使用迭代而不是递归,并且不会返回任何内容。我把它调试到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;
}
是的,我的名单是有序的;)
答案 0 :(得分:3)
在第二个else if
部分中,您需要设置last
而不是first
-
else if(obj.compareTo(array[middle]) < 0) last = middle - 1;