二分查找算法

二分查找算法
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 @ 2023-10-26 10:54  jialiangzai  阅读(63)  评论(0)    收藏  举报