查找.md 2.2 KB


title: 查找 tags:

  • module
  • data-structure-and-algorithm
  • search
  • joplin type: module source_type: reconstructed created: 2026-04-22 updated: 2026-04-22 ---

查找

[!abstract] 这一模块处理“如何快速找到目标元素”这个核心问题。复习时重点不是背函数名,而是理解不同查找方式对数据有序性和结构的依赖。

模块结论

  • [[查找算法]] 的核心是利用已有结构信息减少比较次数。
  • 顺序查找适用范围最广,但效率通常较低。
  • 折半查找要求有序顺序表,这是它高效的前提,不是白来的。

一、顺序查找

  • 从头到尾逐个比较。
  • 优点是实现简单,对存储结构要求低。
  • 缺点是平均比较次数较多。

二、折半查找

  • 要求表有序且支持随机访问。
  • 每次比较后把查找区间缩小一半。
  • 典型复杂度是 O(log n)

为什么链表不适合折半查找

  • 因为折半查找依赖快速定位中间位置。
  • 链表访问中间结点代价高,无法发挥折半优势。

三、查找结构与查找代价

  • 静态查找更关注查找效率。
  • 动态查找还要考虑插入删除成本。
  • 所以不同结构会引出顺序表、二叉排序树、平衡树、哈希等不同方案。

四、查找判定思维

  • 先看数据是否有序。
  • 再看是否允许随机访问。
  • 最后看结构是静态还是动态变化。

五、易错点

  • 折半查找快,不代表它适用所有场景。
  • 有序只是条件之一,还要有合适的存储结构。
  • 动态查找时不能只看一次查询速度,还要看维护代价。

六、复习提问

  • 折半查找为什么要求有序顺序表?
  • 查找问题为什么会引出树结构而不止是数组?
  • 静态查找和动态查找各自更关注什么?

来源

  • [[raw/Joplin/计算机专业基础/数据结构与算法/(C)840数据结构与算法/4.查找.md]]
  • [[raw/Joplin/计算机专业基础/数据结构与算法/(C)840数据结构与算法/5.二叉排序树.md]]
  • [[raw/Joplin/计算机专业基础/数据结构与算法/(C++)数据结构与算法/12.二叉排序树.md]]

相关页面

  • [[数据结构与算法]]
  • [[查找算法]]
  • [[二叉排序树]]
  • [[AVL树]]