算法基础(七)– 排序算法总结
作者:互联网
常见排序算法总结
排序算法汇总
最近对排序算法进行了一些复习,单独对常见的几种排序算法进行了整理总结,汇总如下:
这里再列上很早之前写的几篇排序相关文章,算是进行一个汇总:
- 插入排序–直接插入排序与希尔排序
- 交换排序–冒泡排序与快速排序
- 选择排序–直接选择与堆排序
- 拜托,面试不要问我比较排序了——一文搞懂比较排序
- 排序算法——归并排序
- 非比较排序之计数排序/桶排序
- 分配排序之基数排序
到这里,算是对常见的每一个排序算法有了比较充分的认识,但还缺少一些对他们之间的横向对比。
排序算法对比
算法之间的对比常见的有时间复杂度、额外空间复杂度,对于排序算法来说,还有一个稳定性指标:指同样大小的样本再排序之后不会改变相对次序,如果没有改变,我们称排序算法具有稳定性。
对于基础类型的排序,比如整型,稳定性是没有意义的;而对于非基础类型,稳定性有重要意义。
常见排序算法之间的对比总结如下表:
算法 | 时间复杂度 | 额外空间复杂度 | 稳定性 |
---|---|---|---|
选择 | 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) | 有 |
我们知道,计数、基数排序是非比较的排序方式,对样本数据有严格的规定。
基于比较的排序中,选择、冒泡、插入排序的时间复杂度都相对较高,因此平常不常用。而归并、快排、堆排序都有其各自的特点,适用于不同场景,基于此表格的具体总结如下:
- 不基于比较的排序对样本数据有严格的要求,不易于改写;
- 基于比较的排序,规定好两个样本如何比较大小,可直接复用;
- 基于比较的排序,时间复杂度的极限是O(N*logN);
- 时间复杂度O(N*logN)、额外空间复杂度低于O(N)、且稳定的基于比较的排序不存在;
- 为了绝对的速度选快排、为了省空间选堆排、为了稳定性选归并。
小结
到这里,算是对排序算法做了一个简短的总结,后面继续我的算法旅程,我会继续分享更多算法学习过程中的记录、总结,感谢大家的持续关注。
欢迎关注我的公众号【CoolWrite】,了解更多内容:
标签:总结,归并,复杂度,算法,logN,排序,比较 来源: https://blog.csdn.net/lyg673770712/article/details/121594691