Java 当目标==列表[mid]时,二进制搜索在while循环的第一次迭代中不返回true
我认为我是二进制搜索的专家,因为我可以做线性搜索、递归搜索和迭代搜索,但我甚至不能在java中使用它 因此,如果我将目标变量设置为等于中点,if语句将跳过该点,然后转到else ifJava 当目标==列表[mid]时,二进制搜索在while循环的第一次迭代中不返回true,java,arrays,element,binary-search,Java,Arrays,Element,Binary Search,我认为我是二进制搜索的专家,因为我可以做线性搜索、递归搜索和迭代搜索,但我甚至不能在java中使用它 因此,如果我将目标变量设置为等于中点,if语句将跳过该点,然后转到else if public static void main(String[] args) { int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 }; int target = 44; System.out.print(Binary
public static void main(String[] args) {
int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
int target = 44;
System.out.print(BinarySearchIterarive(list, target));
}
public static boolean BinarySearchIterarive(int[] list, int target) {
int high = list.length - 1;
int low = 0;
while (low <= high) {
int mid = (low + high) / 2;
if (target == list[mid]) {
return true;
} else if (target < list[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return false;
}
}
当list[mid]为44时,让我们在这里进行简单的跟踪
11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99
Target: 44
第一步:high=8,low=0
low <= high
low <= high
第二步:high=3
,low=0
low <= high
low <= high
因此,low=2
,high=3
第三步:high=3
,low=2
同样,
low vs studio debugger它在执行if语句后不会返回true,否则如果数组是基于零的,则正确的索引是3
无法复制:对我来说,代码按预期工作。
Target > list[mid]
Target > list[mid]
low == high
Target = list[mid]
returns true