算法核心知识复习:排序算法对比 + 递归与递推深度解析(根据GESP四级题目总结)

算法核心知识复习:排序算法对比 + 递归与递推深度解析

摘要:本文整合排序算法的复杂度/稳定性对比,以及递归与递推的核心区别,助你高效备战面试与考试!


一、排序算法关键特性对比

排序算法 时间复杂度 空间复杂度 稳定性
冒泡排序 最坏/平均:O(n²);最好:O(n) O(1) 稳定 ✅
选择排序 最坏/平均/最好:O(n²) O(1) 不稳定 ❌
插入排序 最坏/平均:O(n²);最好:O(n) O(1) 稳定 ✅
归并排序 最坏/平均/最好:O(n log n) O(n) 稳定 ✅
快速排序 最坏:O(n²);平均/最好:O(n log n) 平均 O(log n),最坏 O(n) 不稳定 ❌
堆排序 最坏/平均/最好:O(n log n) O(1) 不稳定 ❌
基数排序 最坏/平均/最好:O(nk)★ O(n + k) 稳定 ✅☆

关键说明:

  • 稳定性:稳定算法保持相等元素的原始顺序(如冒泡排序),不稳定算法可能打乱顺序(如选择排序)。
  • 基数排序 :★k为最大数字的位数;☆需配合稳定的桶排序(如计数排序)。
  • 快速排序:实际应用中效率高,但最坏情况(如已排序数组)性能退化。

二、递归 vs 递推:本质区别与适用场景

1. 递归(Recursion)
  • 核心思想 :自顶向下分解问题,通过函数调用自身解决子问题(如树形结构)。
  • 特点 :
    • ✅ 代码简洁(如阶乘:n! = n * (n-1)!)。
    • ❌ 栈溢出风险(深度过大)、函数调用开销高。
  • 经典应用:二叉树遍历、汉诺塔问题。
2. 递推(迭代/动态规划)
  • 核心思想 :自底向上构建解,通过已知解逐步推导未知解(如填表法)。
  • 特点 :
    • ✅ 无栈溢出风险、性能更优(减少函数调用)。
    • ❌ 逻辑可能更复杂(需设计状态转移方程)。
  • 经典应用:斐波那契数列(DP版)、爬楼梯问题。
3. 对比总结
特性 递归 递推
问题分解 分解为相同子问题(分治) 分解为相互依赖的子问题(递推式)
方向 自顶向下 → 从目标到基线条件 自底向上 → 从基线到目标
性能 较差(栈开销) 更优(无调用开销)
适用场景 问题逻辑天然递归(如DFS) 子问题重叠(如DP问题)

形象比喻:

  • 递归:站在山顶拆解任务(大问题→小问题),直到山脚直接解决。
  • 递推:从山脚逐步搭建阶梯(小解→大解),最终登顶。

三、如何选择?实战建议

  1. 排序算法 :
    • 优先快速排序 (平均高效)、归并排序(稳定且O(n log n))。
    • 小规模数据用插入排序(常数项低)。
  2. 递归/递推 :
    • 递归 → 代码简洁性优先(如非性能瓶颈)。
    • 递推 → 性能关键场景(如DP优化斐波那契)。
    • 递归转递推 :多数递归可用备忘录 或迭代DP优化!
相关推荐
dialect_8 小时前
KMP算法
开发语言·c++·算法
reikocao8 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz9 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·9 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫10 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司12 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真13 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄13 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy14 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH14 小时前
P5025 [SNOI2017] 炸弹
c++·算法