二分查找算法
二分查找算法
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。这个左边界也可以看作是插入位置的索引,因为它是第一个大于目标值的元素的索引。
总结起来,这个函数使用二分查找算法在有序数组中查找目标值,并返回目标值的索引或插入位置的索引。
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/articles/17788929.html

浙公网安备 33010602011771号