请参见下面的Java源代码以实现二进制搜索
public class Main {
public static void main(String[] args) {
int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int y = binarySearch(x, 11);
System.out.println(y);
}
public static int binarySearch(int[] arr, int value) {
int searchedIndex = -1;
int first = 0;
int last = arr.length - 1;
int mid;
while (first <= last) {
mid = (first + last) / 2;
if (arr[mid] == value) {
searchedIndex = mid;
break;
} else {
if (value < arr[mid]) {
last = mid - 1;
} else {
first = mid + 1;
}
}
}
return searchedIndex;
}
}
int last = arr.length-1 是否为-1强制性。我觉得 last = arr.length-1 都可以正常工作。如果必须,请说明原因。
答案 0 :(得分:3)
Arrays已经拥有方法binarySearch,您可以使用:
int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int r = Arrays.binarySearch(x, 11);
答案 1 :(得分:0)
在一种非常特殊的情况下,需要-1
:当搜索的值大于数组中的最大值时。例如,使用
int y = binarySearch(x, 50);
将抛出ArrayOutOfBounds异常。这是因为mid
最终将等于last
,并且如果没有-1
,则last
会超出数组的末尾。