使用javascript
,我一直在尝试二进制搜索,并进行了一个while循环,该循环将循环数字列表,直到第一个索引小于最后一个索引。然后我计算中点或平均值,并将中点指标值与输入值进行比较。当匹配时,它显示输入值的索引,但循环永远不会结束。
function binary_search(value, array){
var first = 0;
var last = array.length - 1;
while(first <= last){
var midpoint = Math.floor((first + last) / 2);
if(array[midpoint] == value){
console.log(midpoint);
}else if(array[midpoint] < value){
first = midpoint + 1;
}else if(array[midpoint] > value){
last = midpoint -1;
}
}
}
一旦循环到达if语句,就没有任何东西可以阻止它
if(array[midpoint] == value){
console.log(midpoint);
}
并且,如果语句返回true,即不再返回、中断或更改first/last的值,则循环将继续循环。您很可能应该在if语句中包含一个break语句。类似:
function binary_search(value, array){
var first = 0;
var last = array.length - 1;
while(first <= last){
var midpoint = Math.floor((first + last) / 2);
if(array[midpoint] == value){
console.log(midpoint);
break;
}else if(array[midpoint] < value){
first = midpoint + 1;
}else if(array[midpoint] > value){
last = midpoint -1;
}
}
}