首页 > 编程语言 > 详细

排序算法的总结

时间:2021-08-01 22:29:13      阅读:26      评论:0      收藏:0      [点我收藏+]

八大排序:

排序方法

最好时间

平均时间

最坏时间

辅助空间

稳定性

特点

直接插入排序

O(n)

O(n2)

O(n2)

O(1)

稳定

元素少或基本有序时高效

希尔排序

O(n)

O(n^1.25)

O(n2)

O(1)

 

冒泡排序

O(n)

O(n2)

O(n2)

O(1)

稳定

 

快速排序

O(nlog2n)

O(nlog2n)

O(n2)

O(nlog2n)

平均时间性能最好

简单选择排序

O(n2)

O(n2)

O(n2)

O(1)

比较次数最多

堆排序

O(nlog2n)

O(nlog2n)

O(nlog2n)

O(1)

辅助空间少

归并排序

O(nlog2n)

O(nlog2n)

O(nlog2n)

O(n)

稳定

稳定的

基数排序

O(n*k)

O(n*k)

O(n*k)

O(n+k)

稳定

 

 

(1)时间复杂度
直接插入排序、冒泡排序、直接选择排序这三种简单排序方法的时间复杂度都为O(n2),快速排序、堆排序、二路归并排序的时间复杂度都为O(nlogn),希尔排序的时间复杂度介于这两者之间。若从最好的时间复杂度考虑,则直接插入排序和冒泡排序的时间复杂度最好为O(n) ,其他排序算法的最好情况同平均情况相同。若从最坏的时间复杂度考虑,则快速排序为O(n2),直接插人排序、冒泡排序、希尔排序同平均情况相同,但系数大约增加倍,所以运行速度将降低一-半,而最坏情况对直接选择排序、堆排序和归并排序影响不大。

(2)空间复杂度
归并排序的空间复杂度最大,为O(n),快速排序的空间复杂度为O(nlogn),其他排序的空间复杂度为0(1)。
(3)稳定性
一般来说,简单排序算法是稳定的排序算法,如直接插人排序、冒泡排序都是稳定的排序算法,但值得注意的是,直接选择排序是不稳定的。


各种排序算法的选择
(1)当待排序记录数n较大时,排序关键字随机分布,同时对稳定性无要求时,则采用快速排序为宜。
(2)当待排序记录数n较大,内存空间允许,且要求排序稳定时,采用二路归并排序为宜。
(3)当待排序记录数n较大,排序关键字可能会出现正序或逆序的情况,同时对稳定性无要求时,则采用堆排序或二路归并排序为宜。
(4)当待排序记录数n较小,元素基本有序或随机分布,且要求稳定时,则采用直接插人排序为宜。
(5)当待排序记录数n较小,同时对稳定性无要求时,则采用直接选择排序为宜;若排序码不接近逆序,也可以采用直接插人排序。
总之,对记录数较多的排序,可以选择快速排序、堆排序、归并排序;当记录数较少时,可以选择简单的排序方法。若从空间的角度上,则尽量选择空间复杂度为0(1)的排序方法。

排序算法的总结

原文:https://www.cnblogs.com/starstarn/p/15087506.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!