排序算法概述
网上常见的排序算法有十种:冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、基数排序、桶排序。
排序算法分类
上面十大排序算法按照非线性时间比较类排序和线性时间非比较类排序进行分类:
排序算法对比
从时间复杂度、空间复杂度和 稳定性三方面对比十种排序方法如下:
排序算法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度(平均) | 稳定性 |
---|---|---|---|---|---|
冒泡排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 |
快速排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | 不稳定 |
插入排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 |
希尔排序 | O(n1.3)O(n1.3) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 不稳定 |
选择排序 | O(n2)O(n2) | O(n2)O(n2) | O(n2)O(n2) | O(1)O(1) | 不稳定 |
堆排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(1)O(1) | 不稳定 |
归并排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(n)O(n) | 稳定 |
计数排序 | O(n+k)O(n+k) | O(n+k)O(n+k) | O(n+k)O(n+k) | O(n+k)O(n+k) | 稳定 |
基数排序 | O(n+k)O(n+k) | O(n2)O(n2) | O(n)O(n) | O(n+k)O(n+k) | 稳定 |
桶排序 | O(n⋅k)O(n⋅k) | O(n⋅k)O(n⋅k) | O(n⋅k)O(n⋅k) | O(n+k)O(n+k) | 稳定 |