public static int binarySearch(int[] x, int target) {
int left = 0;
int right = x.length - 1;
int mid = (right + left ) / 2;
while ( left <= right) {
mid = (right + left) / 2;
if (x[mid] == target) {
return mid;
}
else if (x[mid] > target) {
right = mid-- ;
}
else if (x[mid] < target ) {
left = mid ++;
}
}
return -1;
}
说代码是:
` public static void main(String args[] ) { int[] myArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(binarySearch(myArr, 11));
}`
它永远不会打印出-1,而是进入一个循环,其中: 中:10 左:9 右:10
我该如何解决这个问题?
在我看来,使用 while 循环令人困惑。您正在尝试在数组中搜索一个值,我认为 for 循环更适合。在 while 循环中,您没有任何东西可以增加 left 的值,因此条件保持在 true 状态。
这是建议的修复方法:
public static int binarySearch(int[] x, int target) {
int left = 0;
int right = x.length - 1;
int mid = (right + left ) / 2;
for (left = 0; left < x.length - 1; left ++) {
mid = (right + left) / 2;
if (x[mid] == target) {
return mid;
}
else if (x[mid] > target) {
right = mid-- ;
}
else if (x[mid] < target ) {
left = mid ++;
}
}
return -1;
}
public static void main(String args[] ) {
int[] myArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(binarySearch(myArr, 11));
}
此代码使用 for 循环来迭代数组 (x.length - 1) 并返回您编写的二分搜索方法的值。