public static boolean binarySearch(int[] data, int value){
int start = 0;
int end = data.length-1;
int middle = (start + end) / 2;
while(end >= start){
if(data[middle] == value){
System.out.println("binarySearch found value " + value + " at position " + data[middle]);
return true;
}
if(data[middle] < value){
start = middle + 1;
}
if(data[middle] > value){
end = middle + 1;
}
}
return false;
}
我有用于二进制搜索的代码,对我来说似乎一切都在检查中。但是,当我传递一个数组和一个变量时,我正在寻找它,它并没有给我任何回报,我只需要终止它即可。有什么想法吗?
最佳答案
if(data[middle] == value)
这部分检查数组的中间是否始终等于数据。如果您不修改变量
middle
,无论您做什么,它都会始终检查中间值是否等于data
。由于您也不会同时修改
start
和end
, while(end >= start)
这部分还阻止您完成循环。
这是我尝试的:
int data[] = {1, 3, 4, 5, 7, 8, 12};
int value = 7;
binarySearch(data, value);
这是我添加时得到的输出
System.out.println("Start: " + start +
" Middle: " + middle + " End: " + end);
在
while
循环的开头:Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
...
到无穷远。
关于java - 二进制搜索永远不会完成,我必须自己终止它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24600296/