javascript - 我在 JavaScript 中使用二分搜索实现的无限循环

标签 javascript binary-search

这是我关于堆栈溢出的第一个问题,所以请耐心等待。 我编写了这个二元搜索函数,但由于某种原因它挂起 - 我假设是因为无限循环。任何人都可以找到我的代码的错误吗?

let binarySearch = (array, value) => {
 let target = value,
     start = 0,
     end = array.length - 1,
     middle = Math.floor( (end + start)/2 )

  while (start <= end){

    if ( array[middle] === target ){
      return true
    }else if (array[middle] < target){
      start = middle + 1
    }else if (array[middle] > target){
      end = middle - 1
    }    
  }
 return false
}

最佳答案

最明显的错误是,您需要将 middle 计算为循环内部的第一个操作,而不是外部。

如果没有这种更改,您总是会在第一次调用函数时检查哪个元素是“中间”的,并且永远不会对搜索空间进行分区。

修复到位后,我的测试表明代码可以按要求工作,尽管按照注释中的建议,您应该返回找到的元素的索引,而不仅仅是一个表示是否找到该元素的标志。

关于javascript - 我在 JavaScript 中使用二分搜索实现的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44890165/

相关文章:

javascript - 有多少业务逻辑属于 Vuex?

java - 为什么二分查找对这个未排序的数组有效?

Java arrays.binary 搜索多个匹配项?

java - 将线性和二进制搜索应用于数组

java - 二分查找--同一个数组中的 double 和整数

c - 二分查找输出错误

javascript - 基于登录注销和表单提交响应条件渲染

javascript - MongoDB 将 mongo 实例包装在 Promise 中

javascript - 通过 javascript 播放 mp4 视频

javascript - 删除调用 onclick 的元素