基本概念

排序的稳定性:
排序后大小相同的元素的相对位置不发生改变的排序为稳定排序,反之不稳定。

内排序与外排序:
根据在排序过程中待排序的记录是否全部放置在内存中
主要介绍内排序

内排序性能

  1. 时间性能
    1. 比较次数
    2. 移动次数
  2. 辅助空间
  3. 算法的复杂性

算法分类

排序 - 图1

总结

算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性
冒泡 O(n2) O(n) O(n2) O(1) 稳定
选择 O(n2) O(n2) O(n2) O(1) 不稳定
插入 O(n2) O(n) O(n2) O(1) 稳定
希尔 O(n log n)~O(n2) 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(n2) O(log n)~O(n) 不稳定
堆排序 O(n log n) O(n log n) O(n log n) 取决于具体实现 不稳定
计数 O(n + m) O(n + m) O(n + m) O(n + m) 稳定
桶排序 O(n + m) O(n + m) O(n2) O(n + m) 稳定
基数排序 O(n * d) O(n * d) O(n2) O(n + k) 稳定

桶排序最坏时间复杂度:所有元素在一个桶且用时间复杂度为O(n2)的算法

归并排序 容器 时间复杂度 空间复杂度
自上而下 数组 O(n log n) O(n + log n)
链表 O(n log n) O(logn)
自下而上 数组 O(n log n) O(n)
链表 O(n log n) O(1)

排序 - 图2