--- 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树]]