二进制搜索总是 return -`

Binary search always return -`

我正在尝试使用 JS 实现二进制搜索,但它会进入无限循环。它没有返回位置。我不确定我做错了什么。

代码:

function binarySearch(value, list) {
    let initial = 0;
    let end = list.length - 1;
    let found = false;
    let middle;
    let position = -1;
  
    while (found != true && initial <= end){
      middle = Math.round(initial + end) / 2;
      if (value == list[middle]) {
      found = true;
      position = middle;
      } else if (value < list[middle]) end = middle - 1;
      else initial = middle + 1;
  }
      console.log(position) ;
  
  }
binarySearch(3, [1, 3, 5, 6]);

下面的代码总是正确的,因此是一个无限循环。

while (found != true && initial <= end)
    middle = Math.round(initial + end) / 2;

将代码放在大括号内


function binarySearch(value, list) {
  let initial = 0;
  let end = list.length - 1;
  let found = false;
  let middle;
  let position = -1;

  while (found != true && initial <= end){
    middle = Math.round((initial + end) / 2);
    if (value == list[middle]) {
    found = true;
    position = middle;
    } else if (value < list[middle]) end = middle - 1;
    else initial = middle + 1;
}
    return position;i

}

您有 middle = Math.round(initial + end) / 2;,但结果并不总是整数。

将其更改为 middle = Math.round((initial + end) / 2); 以始终获取整数。