二分查找的实现

发布于 2022-09-12 23:12:21 字数 442 浏览 13 评论 0

刚学算法,看了二分查找的概念,在还没看示例代码的时候,根据自己的思路用js写了实现:

function binarySearch(arr, aimNum) {
  let index = Math.ceil(arr.length/2) - 1;
  if (arr[index] === aimNum) {
    return index
  } else if (arr[index] > aimNum){
    halfSearch(arr.slice(0,index), aimNum)
  } else if (arr[index] < aimNum) {
    halfSearch(arr.slice(index+1), aimNum)
  }
}

看了示例代码,发现我的思路好像有点偏,但我觉得在日常开发中好像也可以,就是不知道这种方式是不是不够完善,有没有大佬给我指点一下?跪谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪我太投入 2022-09-19 23:12:21

可以是可以,但肯定不会有 Array#findIndex 快。


而且你这写的有挺多问题

  1. 内外函数名不统一
  2. slice 效率太低,应递归下标
  3. 中间递归返回值没有处理
function binarySearch(A, n, l = 0, r = A.length - 1) {
    if (l >= r) return
    const m = ~~ ((l + r) / 2);
    const v = A[m]
    return v === n ? m : v > n
        ? binarySearch(A, n, l, m)
        : binarySearch(A, n, m + 1, r)
}
苏别ゝ 2022-09-19 23:12:21

https://github.com/PiNengShao...
不用着急慢慢来想二分查找这种经典的思想,以后你做题肯定会碰到很多次的,到时候的后闭着眼睛都能写出来,你现在就先死记一下他的边界条件,可以参考一下这个相当于c++里面的lower_bound他算是在工作中比较用得到的二分查找实现了我这个边界条件是l <= r的l < r的你可以在网上自己搜一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文