当前位置: 首页 > news >正文

【初赛】排序 - Slayer

常见排序算法的时间复杂度与空间复杂度总结

1. 冒泡排序(Bubble Sort)

  • 时间复杂度
    • 最好:O(n)(数组已有序,加入标志位提前退出)
    • 平均:O(n²)
    • 最坏:O(n²)(数组逆序)
  • 空间复杂度:O(1)(原地排序,仅需临时变量)

2. 选择排序(Selection Sort)

  • 时间复杂度
    • 最好:O(n²)(需遍历所有元素找到最小/大值)
    • 平均:O(n²)
    • 最坏:O(n²)
  • 空间复杂度:O(1)(原地排序,仅需临时变量)

3. 插入排序(Insertion Sort)

  • 时间复杂度
    • 最好:O(n)(数组已有序,无需移动元素)
    • 平均:O(n²)
    • 最坏:O(n²)(数组逆序,每次插入需移动所有已排序元素)
  • 空间复杂度:O(1)(原地排序,仅需临时变量)

4. 快速排序(Quick Sort)

  • 时间复杂度
    • 最好:O(n log n)(每次均匀划分数组)
    • 平均:O(n log n)
    • 最坏:O(n²)(数组已序或逆序,每次划分仅减少一个元素)
  • 空间复杂度
    • 最好/平均:O(log n)(递归栈深度为 log n)
    • 最坏:O(n)(递归栈深度为 n)

5. 归并排序(Merge Sort)

  • 时间复杂度
    • 最好/平均/最坏:O(n log n)(分治策略,每一层合并需 O(n),共 log n 层)
  • 空间复杂度:O(n)(合并时需额外数组存储临时结果)

6. 堆排序(Heap Sort)

  • 时间复杂度
    • 最好/平均/最坏:O(n log n)(建堆 O(n),每次调整堆 O(log n),共 n 次)
  • 空间复杂度:O(1)(原地排序,利用原数组构建堆)

7. 计数排序(Counting Sort)

  • 时间复杂度
    • 最好/平均/最坏:O(n + k)(k 为数值范围,遍历数组 O(n) + 统计范围 O(k))
  • 空间复杂度:O(n + k)(需统计数组和输出数组)

8. 基数排序(Radix Sort)

  • 时间复杂度
    • 最好/平均/最坏:O(d(n + k))(d 为最大数的位数,k 为基数,如十进制 k=10)
  • 空间复杂度:O(n + k)(需临时数组存储每一位排序结果)

9. 桶排序(Bucket Sort)

  • 时间复杂度
    • 最好:O(n + k)(数据均匀分布,桶内用线性排序)
    • 平均:O(n + k)
    • 最坏:O(n²)(所有数据集中在一个桶,退化为桶内排序复杂度)
  • 空间复杂度:O(n + k)(需存储桶和临时数组)

复杂度对比表

算法 最好时间 平均时间 最坏时间 空间复杂度 稳定性
冒泡排序 \(\color{blue}{O(n)}\) \(\color{green}{O(n^2)}\) \(\color{green}{O(n^2)}\) O(1) 稳定
插入排序 \(\color{blue}{O(n)}\) \(\color{green}{O(n^2)}\) \(\color{green}{O(n^2)}\) O(1) 稳定
选择排序 \(\color{green}{O(n^2)}\) \(\color{green}{O(n^2)}\) \(\color{green}{O(n^2)}\) O(1) \(\color{red}{不稳定}\)
快速排序 \(\color{red}{O(n \log n)}\) $\color{red}{O(n \log n)} $ \(\color{green}{O(n^2)}\) O(log n) \(\color{red}{不稳定}\)
归并排序 \(\color{red}{O(n \log n)}\) \(\color{red}{O(n \log n)}\) \(\color{red}{O(n \log n)}\) O(n) 稳定
堆排序 \(\color{red}{O(n \log n)}\) \(\color{red}{O(n \log n)}\) \(\color{red}{O(n \log n)}\) O(1) \(\color{red}{不稳定}\)
计数排序 O(n + k) O(n + k) O(n + k) O(n + k) 稳定
桶排序 O(n + k) O(n + k) \(\color{green}{O(n^2)}\) O(n + k) 稳定
基数排序 O(d(n + k)) O(d(n + k)) O(d(n + k)) O(n + k) 稳定

泡插选平方
泡茶选平方
快归堆 nlogn
快归队 nlogn
计桶n+k 基数d(n+k)
计桶n+k 基数再乘D

关键特性总结

  • 稳定排序:冒泡、插入、归并、计数、基数、桶排序(桶内排序稳定时)。
  • 原地排序:冒泡、选择、插入、快速、堆排序(空间复杂度 O(1) 或 O(log n))。
  • 线性时间排序:计数、基数、桶排序(需满足数值范围或分布条件)。
http://www.rkmt.cn/news/230.html

相关文章:

  • LG11755
  • 「LAOI-9」Update
  • ABC393F
  • ABC389F
  • ABC150 C-F
  • 【游戏设计】五子棋设计思路
  • LG10516
  • Linux作业及状态转换
  • 设备驱动程序和设备独立性软件的区别
  • 树状数组板子
  • 网络流——OI复健
  • 2025“钉耙编程”中国大学生算法设计暑期联赛(3)
  • Symfony学习笔记 - Symfony Documentation - Getting Started(下)
  • 线段树板子
  • 双列圆锥滚子轴承载荷分布计算程序
  • 矢量篇 - KMLKMZ转SHP
  • js空值合并运算符?? - jerry
  • ubuntu上通过kvm新建虚拟机
  • 关于USB 无线 WIF 设备驱动安装的问题
  • Spring Boot常用注解-详细解析+示例 - 指南
  • test
  • linux
  • MAG-GNN: Reinforcement Learning Boosted Graph Neural Network | 代码 |
  • GCFExplainer: Global Counterfactual Explainer for Graph Neural Networks
  • Spring Boot 笔记
  • 使用通义灵码快速生成换装、瘦身程序 #Qwen3-Coder挑战赛# - yi
  • 软件工程第一次作业-tanglei
  • xtrabackup 8.0日常管理
  • 从KPI管理转向更困难的OKR管理的企业都在想什么
  • Day03 课程