在查看此教科书页面上的示例后,我正在尝试实现递归二进制搜索。
在大多数情况下,我的算法似乎工作正常,但在高于数组中最大值的值上,我得到一个ArrayIndexOutOfBoundsException
. 查看我的算法和教科书示例,它们似乎相同;有人可以帮我找到我哪里出错了吗?
我知道这与此线程中的问题基本相同,并且我已经考虑了它提出的解决方案。然而,示例代码并没有像这样实现任何参数更正,我想知道为什么没有它它也能工作。
public static int binarySearch(int[] array, int item, int lowPos, int highPos){
if (lowPos > highPos){
return -1;
}
int mid = (lowPos + highPos)/2;
if (array[mid] == item){
return mid;
}else if (array[mid] > item){
return binarySearch(array, item, lowPos, mid-1);
}else{
return binarySearch(array, item, mid+1, highPos);
}
}
这是教科书的例子,显然不会产生错误:
static int binarySearch(int[] A, int loIndex, int hiIndex, int value) {
if (loIndex > hiIndex) {
// The starting position comes after the final index,
// so there are actually no elements in the specified
// range. The value does not occur in this empty list!
return -1;
}
else {
// Look at the middle position in the list. If the
// value occurs at that position, return that position.
// Otherwise, search recursively in either the first
// half or the second half of the list.
int middle = (loIndex + hiIndex) / 2;
if (value == A[middle])
return middle;
else if (value < A[middle])
return binarySearch(A, loIndex, middle - 1, value);
else // value must be > A[middle]
return binarySearch(A, middle + 1, hiIndex, value);
}
} // end binarySearch()