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
            }
        }
相关推荐
ZC跨境爬虫8 分钟前
LeetCode 219. 存在重复元素 II(滑动窗口 + 哈希表详解)
算法·leetcode·散列表
吞下星星的少年·-·18 分钟前
The 2025 ICPC Asia East Continent Online Contest (I) A题(模拟+贪心)
算法·贪心·模拟
————A20 分钟前
Agent 文件处理中间件
开发语言·javascript·ecmascript
小程序设计38 分钟前
【机械设计】磁粉检测机器人的设计与验证
算法·机器人
ITresearchGuest39 分钟前
LangChain JS 入门:快速搭建前端 AI 开发环境
前端·javascript·langchain
YHHLAI43 分钟前
React + TypeScript 实战:从零构建颜色选择器应用
前端·react.js·typescript
Navigator_Z43 分钟前
LeetCode //C - 1220. Count Vowels Permutation
c语言·算法·leetcode
小磊哥er1 小时前
深入解构Claude Code - 第 1 篇 · 先认识它
javascript·ai编程
Profile排查笔记1 小时前
指纹浏览器手机版怎么选?从本地 App 到云端 Android 的实现方式解析
前端·人工智能·后端·自动化
雪芽蓝域zzs1 小时前
第十节:动态侧边栏菜单(根据路由 meta 自动渲染菜单)
javascript·vue.js·elementui