JS 【算法】二分查找

使用场景

在有序数组中查找目标元素

js 复制代码
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const target = 2
console.log(binarySearch1(arr, target))
console.log(binarySearch2(arr, target))

循环实现

js 复制代码
        function binarySearch1(arr, target) {
            const length = arr.length
            if (length === 0) return -1

            let startIndex = 0 // 开始位置
            let endIndex = length - 1 // 结束位置

            while (startIndex <= endIndex) {
                const midIndex = Math.floor((startIndex + endIndex) / 2) // 中间位置
                const midValue = arr[midIndex]
                if (target < midValue) {
                    // 目标值较小,则继续在左侧查找
                    endIndex = midIndex - 1
                } else if (target > midValue) {
                    // 目标值较大,则继续在右侧查找
                    startIndex = midIndex + 1
                } else {
                    // 相等,则返回
                    return midIndex
                }
            }

            return -1 // 未找到
        }

递归实现

js 复制代码
        function binarySearch2(arr, target, startIndex, endIndex) {
            const length = arr.length
            if (length === 0) return -1

            // 开始和结束的范围
            if (startIndex == null) startIndex = 0
            if (endIndex == null) endIndex = length - 1

            // 开始和结束相遇,则结束
            if (startIndex === endIndex) return -1

            // 中间位置
            const midIndex = Math.floor((startIndex + endIndex) / 2)
            const midValue = arr[midIndex]

            if (target < midValue) {
                // 目标值较小,则从左侧寻找
                return binarySearch2(arr, target, startIndex, midIndex - 1)
            } else if (target > midValue) {
                // 目标值较大,则从右侧查找
                return binarySearch2(arr, target, midIndex + 1, endIndex)
            } else {
                // 相等,则返回
                return midIndex
            }
        }
相关推荐
AC使者8 分钟前
#B1630. 数字走向4
算法
冠位观测者12 分钟前
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
数据结构·算法·leetcode
轻口味1 小时前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami1 小时前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca1 小时前
洛谷 P1706 全排列问题 C语言
算法
浊酒南街1 小时前
决策树(理论知识1)
算法·决策树·机器学习
就爱学编程1 小时前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
wakangda1 小时前
React Native 集成原生Android功能
javascript·react native·react.js