算法系列之搜素算法-二分查找

简介: 二分查找是一种在`有序`数组中查找特定元素的算法。它的基本思想是通过将数组分成两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。

_20250224201229.jpg

在算法中,查找算法是处理数据集合的基础操作之一。二分查找(Binary Search)是一种高效的查找算法,适用于有序数组或列表。本文将介绍二分查找的基本原理、Java实现。

二分查找介绍

二分查找是一种在有序数组中查找特定元素的算法。它的基本思想是通过将数组分成两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。

_20250224204801.jpg

  • 算法步骤
  1. 初始化:设定查找范围的起始点 left 和结束点 right,初始时 left = 0,right = 数组长度 - 1。

  2. 计算中间点:计算中间点 mid = left + (right-left) / 2。

注:因为 left和right都是int类型,为了避免left+right 超出int类型的最大值。此处使用 mid = left + (right-left) / 2 来计算中间索引。

  1. 比较中间元素:

如果中间元素等于目标值,返回中间索引。

如果中间元素大于目标值,将 right 更新为 mid - 1,继续在左半部分查找。

如果中间元素小于目标值,将 left 更新为 mid + 1,继续在右半部分查找。

  1. 重复步骤2和3,直到 left 大于 right,此时目标元素不存在于数组中,返回 -1。
  • 时间复杂度

二分查找的时间复杂度为 O(log n),其中 n 是数组的长度。这是因为每次查找都将查找范围减半,因此算法的效率非常高。

java实现二分查找

代码如下:

/**
 * 二分查找
 */
public class BinarySearchExample {
   
    /**
     *
     * @param arr 有序数组
     * @param left 左边界
     * @param right 右边界
     * @param value 目标值
     * @return
     */
    public static int binarySearch(int[] arr, int left, int right, int value) {
   
        while (left <= right) {
   
            int mid = left + (right-left) / 2;
            if (arr[mid] == value) {
   
                // 找到目标元素,返回索引
                return mid;
            } else if (arr[mid] < value) {
   
                // 在右半部分继续查找
                left = mid + 1;
            }  else if (arr[mid] > value)  {
   
                // 在左半部分继续查找
                right = mid - 1;
            }
        }
        // 目标元素不存在
        return -1;
    }

    public static void main(String[] args) {
   
        int[] arr = {
   1, 8, 12, 14, 20, 23, 29};
        int index = binarySearch(arr, 0, arr.length - 1, 20);
        System.out.println(index);
    }

}

适用场景

二分查找适用于以下场景:

  • 有序数组:二分查找要求数组必须是有序的,否则无法保证正确性。

  • 静态数据:如果数据集合不经常变动,二分查找是一个高效的选择。

  • 查找频繁:当需要频繁查找某个元素时,二分查找的时间复杂度为 O(log n),远优于线性查找的 O(n)。

总结

二分查找是一种高效的查找算法,适用于有序数组或列表。它的时间复杂度为 O(log n),在处理大规模数据时表现出色。通过本文的介绍,我们了解了二分查找的基本原理、Java实现、适用场景。希望本文能帮助你更好地理解和应用二分查找算法。

目录
相关文章
|
28天前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
81 0
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
152 0
|
10月前
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
12月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
114 1
|
12月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
137 0
|
12月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
374 0
|
12月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
142 0
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
166 0
【算法】二分查找(整数二分和浮点数二分)
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

热门文章

最新文章