重温经典算法——二分查找


版权声明


基本原理

二分查找(Binary Search)是一种基于分治策略的高效搜索算法,适用于有序数组,其核心思想是通过重复将搜索区间分成两半:首先取中间元素与目标值比较,若相等则直接返回位置;若目标值小于中间元素,则在左半区间继续搜索;若目标值大于中间元素,则在右半区间继续搜索,直至找到目标值或搜索区间为空(表明目标不存在)。该算法每次比较可将搜索范围缩小一半,时间复杂度为 O(log n),空间复杂度为 O(1),具有查找速度快、性能稳定的优点。

代码实现

java 复制代码
public class BinarySearch {
    /**
     * 二分查找实现
     * @param arr    有序数组(升序)
     * @param target 目标值
     * @return 目标值索引(未找到时返回 -1)
     */
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1; // 右闭区间
        
        while (left <= right) { // 终止条件:左边界 <= 右边界
            int mid = left + (right - left) / 2; // 防溢出写法:(left + right) 可能溢出
            if (arr[mid] == target) {
                return mid; // 找到目标
            } else if (arr[mid] < target) {
                left = mid + 1; // 目标在右半部分
            } else {
                right = mid - 1; // 目标在左半部分
            }
        }
        return -1; // 未找到
    }

    public static void main(String[] args) {
        int[] arr = {2, 5, 8, 12, 16, 23, 38, 45, 56};
        int target = 23;
        int result = binarySearch(arr, target);
        
        if (result != -1) {
            System.out.println("目标值 " + target + " 的索引为: " + result);
            // 输出:目标值 23 的索引为: 5
        } else {
            System.out.println("目标值不存在");
        }
    }
}
相关推荐
小牛不牛的程序员1 分钟前
利用Claude Code构建自动化需求挖掘工具:从原理到实践
java·算法·自动化
Mr.HeBoYan6 分钟前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk
在书中成长23 分钟前
HarmonyOS 小游戏《对战五子棋》开发第14篇 - 困难AI实现:Minimax算法原理详解
人工智能·算法·harmonyos
格子软件35 分钟前
GEO系统深度实战:多引擎自适应算法与去中心化流控
人工智能·算法·去中心化·区块链
宝贝儿好1 小时前
【LLM】第三章:BERT讲解+情感分析案例
人工智能·深度学习·神经网络·算法·自然语言处理·bert
z小猫不吃鱼1 小时前
06 权重幅值剪枝、剪枝后微调与稀疏网络训练:模型剪枝中的三个基本问题
网络·算法·剪枝
QiLinkOS1 小时前
QiLink OS的失败数据共享平台的运作模式是否适用于所有行业?
android·开发语言·人工智能·算法·重构·开源
C++ 老炮儿的技术栈1 小时前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio
researcher-Jiang1 小时前
Manacher算法学习与应用
c++·学习·算法
码完就睡1 小时前
数据结构——串的模式匹配算法(BF算法、KMP算法)
数据结构·算法