查找算法

介绍

查找算法(Searching Algorithm),简单来说,就是在一组数据中,找到某个特定目标元素的过程和方法。

它是计算机科学中最基础、最常用的算法之一,核心任务只有一个:判断目标是否存在,如果存在,找到它的位置。


概念

查找表 (Search Table)

由同一类型的数据元素(或记录)构成的集合。
例如:数组 [5, 2, 9, 1, 5, 6]。

关键字 (Key)

数据元素中某个数据项的值,用以标识一个数据元素。
例如:我们要找的数字 9。

查找成功 / 失败

  • 成功:找到关键字对应的元素,返回其位置或索引。
  • 失败:表中不存在该关键字,返回特定标识(如 -1)。

常见分类

通常分为两大类:静态查找(只查不改)和 动态查找(可增删改查)。下面是最常用的几种:

顺序查找 (Sequential Search)

  • 适用场景:数据无序或有序均可,对数据结构无要求(数组、链表都行)。
  • 思路:从第一个元素开始,一个一个往后比对,直到找到目标或遍历结束。
  • 优点:简单,无需预处理数据。
  • 缺点:效率低,平均时间复杂度为 O(n)。

二分查找 / 折半查找 (Binary Search)

  • 适用场景:数据必须有序,且通常是数组(支持随机访问)。
  • 思路:每次取中间元素与目标比较,排除一半数据,不断缩小范围。
  • 优点:效率极高,时间复杂度 O(log n)。
  • 缺点:要求数据有序,插入删除麻烦。

哈希查找 (Hash Search)

  • 思路:通过哈希函数,把关键字直接映射到数组下标,一步定位。
  • 优点:理论上接近 O(1) 时间复杂度。
  • 缺点:需要设计好哈希函数,处理哈希冲突。

树查找

  • 如二叉搜索树、平衡二叉树(AVL)、红黑树、B树/B+树等。
  • 适合动态数据,插入、删除、查找都比较高效。

分块查找 (Block Search)

相对不常见,介于顺序查找和二分查找之间,先分块有序,块内无序,先找块再顺序查。

对比

查找方式 时间复杂度 数据要求 典型场景
顺序查找 O(n) 无要求 小数据、无序、简单实现
二分查找 O(log n) 必须有序、支持随机访问 数据库块、文件系统、索引结构
哈希查找 O(1) 哈希函数设计好 有序数组、静态数据

提示:树的分类太多,不同种类的情况不同,这里不列举

总结

查找算法就是“在一堆数据里找东西”的标准化方法,不同算法在速度、空间、是否要求有序、是否支持动态更新上各有取舍,实际开发中根据数据规模和使用场景选择。


原文出处:/show_1GW2j8tfV3LY.html