【算法】十大排序算法(含时间复杂度、核心思想)

复制代码
         以下是 **十大经典排序算法** 的时间复杂度、空间复杂度及稳定性总结,适用于面试快速回顾:

排序算法对比表

排序算法 最佳时间复杂度 平均时间复杂度 最差时间复杂度 空间复杂度 稳定性 核心思想
冒泡排序 O(n) O(n²) O(n²) O(1) 稳定 相邻元素交换,大数沉底。
选择排序 O(n²) O(n²) O(n²) O(1) 不稳定 每次选最小元素放到已排序末尾。
插入排序 O(n) O(n²) O(n²) O(1) 稳定 将未排序元素插入已排序序列。
希尔排序 O(n log n) O(n log² n) O(n log² n) O(1) 不稳定 分组(增量)插入排序,逐步缩小间隔。
归并排序 O(n log n) O(n log n) O(n log n) O(n) 稳定 分治法,合并有序子序列。
快速排序 O(n log n) O(n log n) O(n²) O(log n) 不稳定 分治法,基准值分区递归排序。
堆排序 O(n log n) O(n log n) O(n log n) O(1) 不稳定 构建堆结构,交换堆顶与末尾。
计数排序 O(n + k) O(n + k) O(n + k) O(n + k) 稳定 统计元素出现次数,累加输出。
桶排序 O(n + k) O(n + k) O(n²) O(n + k) 稳定 分桶后对每个桶单独排序。
基数排序 O(nk) O(nk) O(nk) O(n + k) 稳定 按位分配收集,从低位到高位。

关键说明

  1. 稳定性 :稳定排序算法保证相等元素的相对顺序不变(如归并排序),不稳定算法可能改变(如快速排序)。

  2. 适用场景

    • 小规模数据:冒泡、插入、选择排序(简单但效率低)。
    • 大规模数据:快速、归并、堆排序(O(n log n) 复杂度)。
    • 特定数据分布
      • 整数且范围小:计数排序。
      • 均匀分布数据:桶排序。
      • 多关键字排序:基数排序。
  3. 空间复杂度

    • 原地排序:冒泡、插入、选择、希尔、堆排序(O(1) 空间)。
    • 非原地排序:归并、计数、桶、基数排序(需额外空间)。
  4. 快速排序优化

    • 三数取中法:避免最坏情况 O(n²)。
    • 小数组切换插入排序:递归到小数组时用插入排序提升效率。

面试常见问题

  1. 为什么快速排序在实际应用中比归并排序更常用?

    • 快速排序是原地排序,缓存友好;归并排序需要 O(n) 额外空间。
  2. 堆排序为什么不如快速排序快?

    • 堆排序数据访问方式跳跃(非局部性原理),缓存命中率低。
  3. 如何选择排序算法?

    • 数据规模、内存限制、稳定性需求、数据分布特征。
相关推荐
CoovallyAIHub4 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub5 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub5 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub6 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub6 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞6 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕8 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub9 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone77399 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试