排序算法经过长时间演变,大体可以分为两类:内排序和外排序。在排序过程中,全部记录存放在内存,则成为内排序;如果排序过程中需要使用外存,则称为外排序,本文讲的都属于内排序。
内排序有可以分为以下几类:
(1)插入排序:直接插入排序、二分法插入排序、希尔排序
(2)选择排序:直接选择排序、堆排序
(3)交换排序:冒泡排序、快速排序
(4)归并排序
(5)基数排序
排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 复杂性 |
直接插入排序 | O(![]() | O(![]() | O(n) | O(1) | 稳定 | 简单 |
希尔排序 | O(![]() | O(![]() | O(![]() | O(1) | 不稳定 | 较复杂 |
直接选择排序 | O(![]() | O(![]() | O(![]() | O(1) | 不稳定 | 简单 |
堆排序 | O(![]() | O(![]() | O(![]() | O(1) | 不稳定 | 较复杂 |
冒泡排序 | O(![]() | O(![]() | O(n) | O(1) | 稳定 | 简单 |
快速排序 | O(![]() | O(![]() | O(![]() | O(![]() | 不稳定 | 较复杂 |
归并排序 | O(![]() | O(![]() | O(![]() | O(n) | 稳定 | 较复杂 |
基数排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 稳定 | 较复杂 |