当前位置: 首页 > 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.agseo.cn/news/289/

相关文章:

  • Overpass – TryHackMe
  • nvm管理node
  • 浅拷贝和深拷贝两种不同的对象复制
  • NPU前端编译器常见的优化
  • LG11755
  • 「LAOI-9」Update
  • ABC393F
  • ABC393E
  • ABC393D
  • ZR 25 noip D1T2 题解 | 最短路
  • NOIP2024 退役记
  • LG11311
  • CF1746F
  • ABC389F
  • LG10641
  • P11068
  • scp拷贝文件报错
  • ABC150 C-F
  • 【游戏设计】五子棋设计思路
  • LG10516
  • 11.1 定义类和对象
  • C#.NET EFCore.BulkExtensions 扩展详解
  • 2025AI赋能HR新纪元,中国AI HR主流厂商大盘点
  • Linux作业及状态转换
  • C++小白修仙记_LeetCode刷题_队列
  • 设备驱动程序和设备独立性软件的区别
  • Fastjson 1.2.47 远程代码执行
  • 树状数组板子
  • 私有化部署Dify构建企业AI平台教程
  • 树状数组板子2