美文网首页
查找算法(一)二分查找

查找算法(一)二分查找

作者: 又语 | 来源:发表于2021-11-03 17:49 被阅读0次

二分查找(Binary Search)算法,也称折半查找算法,类似分治思想。
二分查找针对一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间范围缩小至之前的一半,直至找到要查找的元素,或者区间范围被缩小为0。

复杂度分析

二分查找的时间复杂度为O(log n),虽然二分查找的时间负责度为O(log n),但是比很多O(1)的速度都要快,因为O(1)可能标示一个非常大的数值,如O(1000)

局限性分析

  • 二分查找依赖数组结构
    二分查找需要利用下标随机访问元素,使用链表等其他数据结构无法使用二分查找;
  • 二分查找针对有序数据
    二分查找需要有序的数据,如果数据无序则首先需要排序,排序的时间复杂度最低是O(n log n)。所以如果针对一组静态数据,没有频繁插入、删除场景,可以进行一次排序、多次二分查找,将排序成本均摊。如果数据存在频繁插入、删除场景,则每次执行二分查找前都要先进行排序,成本很高。所以,二分查找最好用在插入、删除频率低,一次排序多次查找的场景中。
  • 数据量太小不适合二分查找
    数据量很小时顺序遍历即可。
  • 数据量太大不适合二分查找
    二分查找底层依赖数组结构,数组需要一段连续的存储空间,数据太大时可能使用的不是连续存储数据结构。

Java 代码实现

1. 循环实现

    public static int binarySearch(int[] data, int target) {
        int low = 0;
        int high = data.length - 1;
        int middle = 0;
        // low > high:说明data为空
        if (low > high || target < data[low] || target > data[high]) {
            return -1;
        }
        while (low <= high) {
            middle = (low + high) / 2;
            if (data[middle] > target) {
                high = middle - 1;
            } else if (data[middle] < target) {
                low = middle + 1;
            } else {
                return middle;
            }
        }
        return -1;
    }

2. 递归实现

    public static int recursiveBinarySearch(int[] data, int target, int low, int high) {
        if (low > high || target < data[low] || target > data[high]) {
            return -1;
        }
        int middle = (low + high) / 2;
        if (data[middle] > target) {
            return recursiveBinarySearch(data, target, low, middle - 1);
        } else if (data[middle] < target) {
            return recursiveBinarySearch(data, target, middle + 1, high);
        } else {
            return middle;
        }
    }

相关文章

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 数据结构与算法系列——二分查找

    二分查找算法的简单介绍 今天我们来学习一下二分查找算法,也叫做折半查找算法。使用二分查找算法的前提是数据需要是有序...

  • 可查找重复元素的二分查找算法

    可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找。假设...

  • 二分查找算法

    一、二分查找算法 二分查找算法又称为折半查找算法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序...

  • 15-二分查找(上):如何用最省内存的方式实现快速查找功能?

    一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一...

  • 二分查找算法

    @(算法集) 二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 『算法』『数据结构』 浅谈二分算法,理解程序员必懂必会的计算机常

    基本认识 二分算法,又名二分查找、折半查找,是一种查找算法,是最基础的,最简单易学且高效实用的算法之一。二分算法的...

  • 排序算法

    算法与数据结构基础 查找算法: 二分查找法: 简介:二分查找法又被称为折半查找法,用于预排序的查找问题 过程: 如...

网友评论

      本文标题:查找算法(一)二分查找

      本文链接:https://www.haomeiwen.com/subject/gvuqzltx.html