二分查找的实现

刚学算法,看了二分查找的概念,在还没看示例代码的时候,根据自己的思路用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)
  }
}

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

阅读 2k
2 个回答

可以是可以,但肯定不会有 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)
}

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题