常见排序算法的比较
前言
对于各种排序算法的性能我们可以从时间复杂度、空间复杂度、特殊情况和稳定性四个方面来比较。其中特殊情况是指当序列为有序时,对排序算法复杂度的影响。
一、各种排序算法比较
排序算法 | 时间复杂度 | 空间复杂度 | 序列有序 | 稳定性 |
---|---|---|---|---|
直接插入排序 | O(n^2) | O(1) | O(n) | 稳定 |
希尔排序 | O(n^1.3) | O(1) | / | 不稳定 |
冒泡排序 | O(n^2) | O(1) | O(n) | 稳定 |
快速排序 | O(nlog2 n) | O(log2 n) | O(n^2) | 不稳定 |
简单选择排序 | O(n^2) | O(1) | O(n^2) | 不稳定 |
堆排序 | O(nlog2 n) | O(1) | O(nlog2 n) | 不稳定 |
归并排序 | O(nlog2 n) | O(n) | O(nlog2 n) | 稳定 |
基数排序 | O(k(m+n)) | O(n+m) | O(k(m+n)) | 稳定 |
选择排序算法时一般遵循的原则:
- 排序规模不大,用直接插入排序、简单选择排序、冒泡排序均可,虽然其时间复杂度稍逊于快速排序等算法。但其实现简单,在数据量较小时性能的差距体现不明显。
- 当排序规模很大且对稳定性有要求时,可以采用归并排序,前提是有足够的辅助空间。
- 当排序规模很大而关键字位数较小时,可以采用基数排序,速度有保证且稳定。’