二分查找算法

二分查找算法
const func = (array, target) => {
  let left = 0
  let right = array.length - 1

  while (left <= right) {
    let mid = Math.floor((left + right) / 2)

    if (array[mid] === target) {
      return mid
    } else if (array[mid] < target) {
      left = mid + 1
    } else {
      right = mid - 1
    }
  }

  return left
}

这段代码是一个二分查找算法的实现。函数的参数有一个有序数组 array 和一个目标值 target。算法的目标是在数组中找到目标值的索引,如果目标值不存在于数组中,则返回插入位置的索引。

算法首先初始化左边界 left 为数组的第一个元素的索引,右边界 right 为数组最后一个元素的索引。然后进入一个循环,不断缩小搜索范围,直到找到目标值或者搜索范围为空。

在循环中,首先计算中间值 mid,通过将左边界和右边界相加除以2取整得到。然后比较中间值和目标值的大小关系。如果中间值等于目标值,说明已经找到目标值,返回中间值的索引。如果中间值小于目标值,说明目标值在中间值的右侧,将左边界更新为中间值的右侧,继续在右侧搜索。如果中间值大于目标值,说明目标值在中间值的左侧,将右边界更新为中间值的左侧,继续在左侧搜索。

如果循环结束后还没有找到目标值,说明目标值不存在于数组中。根据二分查找的特性,返回左边界 left。这个左边界也可以看作是插入位置的索引,因为它是第一个大于目标值的元素的索引。

总结起来,这个函数使用二分查找算法在有序数组中查找目标值,并返回目标值的索引或插入位置的索引。
posted @   jialiangzai  阅读(50)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示