当 target == list[mid] 时,在 while 循环的第一次迭代中二进制搜索不是 return true
Binary search not return true in first iteration of while loop when target == list[mid]
我认为我是二进制搜索的专家,因为我可以进行线性、递归和迭代,但我什至无法在 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(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;
}
}
它只是跳过了我
的 if 语句
if (target ==list[mid])
当列表[mid]为 44
我们在这里做一个简单的追踪。
11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99
Target: 44
第一步:high = 8, low = 0
low <= high
进入循环:mid = 4
,list[4] = 55
Target < list[mid]
high = 3, low = 0
第二步:high = 3
、low = 0
low <= high
进入循环:mid = 1
,list[1] = 22
这里因为mid是整数小数部分在计算时被忽略
Target > list[mid]
因此,low = 2
、high = 3
第三步:high = 3
、low = 2
再次,low <= high
,进入循环:mid = 2
,list[2] = 33
Target > list[mid]
因此,low = 3
、high = 3
最后一步:
low == high
进入循环:mid = 3
、list[3] = 44
Target = list[mid]
returns true
我认为我是二进制搜索的专家,因为我可以进行线性、递归和迭代,但我什至无法在 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(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;
}
}
它只是跳过了我
的 if 语句if (target ==list[mid])
当列表[mid]为 44
我们在这里做一个简单的追踪。
11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99
Target: 44
第一步:high = 8, low = 0
low <= high
进入循环:mid = 4
,list[4] = 55
Target < list[mid]
high = 3, low = 0
第二步:high = 3
、low = 0
low <= high
进入循环:mid = 1
,list[1] = 22
这里因为mid是整数小数部分在计算时被忽略
Target > list[mid]
因此,low = 2
、high = 3
第三步:high = 3
、low = 2
再次,low <= high
,进入循环:mid = 2
,list[2] = 33
Target > list[mid]
因此,low = 3
、high = 3
最后一步:
low == high
进入循环:mid = 3
、list[3] = 44
Target = list[mid]
returns true