用JavaScript实现二分查找法

function midSearch(alist, nums) {
    let first = 0, last = alist.length - 1;
    let found = false
    while (first <= last && !found) {
        let midNumber = Math.floor((first + last) / 2);
        if (alist[midNumber] === nums) {
            found = true
        } else {
            if (nums < alist[midNumber]) {
                last -= 1
            } else {
                first += 1
            }
        }
    }
    return found
}
midSearch([1, 5, 9, 18, 65], 6)

这段代码是二分查找算法的实现。二分查找是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

这段代码的运行过程如下:

1. 初始化两个指针,first和last,分别指向数组的开始和结束。

2. 在first小于等于last且还未找到目标值的条件下,进入循环。

3. 计算中间位置midNumber,并比较该位置的值与目标值。

4. 如果中间位置的值等于目标值,设置found为true,结束查找。

5. 如果中间位置的值大于目标值,将last设置为midNumber - 1,在左半部分继续查找。

6. 如果中间位置的值小于目标值,将first设置为midNumber + 1,在右半部分继续查找。

7. 如果循环结束还未找到目标值,返回false。

这段代码的时间复杂度是O(log n),其中n是数组的长度。这是因为每次循环,都会将搜索范围缩小一半,所以时间复杂度是对数的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值