为什么我的 while 循环没有中断并无限次地在我的二分搜索中记录搜索的索引?



使用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;
}

}
}

相关内容

  • 没有找到相关文章

最新更新