最近开始学习Java,并在实施“二进制搜索”期间发现,如果我在要搜索的数组上调用Arrays.sort(),则会使循环无限长。删除/注释掉该行可以解决问题,但是我不知道为什么。我的目的是将排序后的数组传递给.binarySearch()方法。试图找出与调试器,但不能。不想让这个问题没有答案,有人可以帮忙吗?
import java.util.Arrays;
public class Main {
static class BinarySearch {
int binarySearch(int[] array, int value) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = low + high / 2;
int guess = array[mid];
if (guess == value) {
return mid;
} else if (guess > value) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
}
public static void main(String[] args) {
BinarySearch bs = new BinarySearch();
int[] a = {1, 3, 4, 45, 54, 666, 2, 4};
Arrays.sort(a);
int result = bs.binarySearch(a, 45);
if (result == -1) {
System.out.println("value not found");
} else {
System.out.println("value found at position: " + result);
}
}
}
答案 0 :(得分:4)
Arrays.sort与您最终陷入无限循环并没有任何关系。这就是您计算中位数的方式。
应该是(low + high) / 2
。您似乎忘了加括号。