为什么我的 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;
    }
    
  }
}