最近对排序算法进行了一些复习,单独对常见的几种排序算法进行了整理总结,汇总如下:
这里再列上很早之前写的几篇排序相关文章,算是进行一个汇总:
到这里,算是对常见的每一个排序算法有了比较充分的认识,但还缺少一些对他们之间的横向对比。
算法之间的对比常见的有时间复杂度、额外空间复杂度,对于排序算法来说,还有一个稳定性指标:指同样大小的样本再排序之后不会改变相对次序,如果没有改变,我们称排序算法具有稳定性。
对于基础类型的排序,比如整型,稳定性是没有意义的;而对于非基础类型,稳定性有重要意义。
常见排序算法之间的对比总结如下表:
算法 | 时间复杂度 | 额外空间复杂度 | 稳定性 |
---|---|---|---|
选择 | O(N^2) | O(1) | 无 |
冒泡 | O(N^2) | O(1) | 有 |
插入 | O(N^2) | O(1) | 有 |
归并 | O(N*logN) | O(N) | 有 |
快排 | O(N*logN) | O(logN) | 无 |
堆排序 | O(N*logN) | O(1) | 无 |
计数 | O(N) | O(M) | 有 |
基数 | O(N) | O(N) | 有 |
我们知道,计数、基数排序是非比较的排序方式,对样本数据有严格的规定。
基于比较的排序中,选择、冒泡、插入排序的时间复杂度都相对较高,因此平常不常用。而归并、快排、堆排序都有其各自的特点,适用于不同场景,基于此表格的具体总结如下:
到这里,算是对排序算法做了一个简短的总结,后面继续我的算法旅程,我会继续分享更多算法学习过程中的记录、总结,感谢大家的持续关注。
欢迎关注我的公众号【CoolWrite】,了解更多内容: