为什么我的 while 循环没有中断并在我的二进制搜索中无限次地记录搜索到的索引?
Why my while loop doesn't break and keeps logging the searched index in my binary search with infinite times?
使用 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);
}
并且 if 语句 returns 为真,因为您不再返回、破坏或更改 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;
}
}
}
使用 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);
}
并且 if 语句 returns 为真,因为您不再返回、破坏或更改 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;
}
}
}