7种常见排序方法总结

大话数据结构第九章读书笔记

排序分类

本章共有七种排序算法,按排序过程中借助的主要操作,分成以下几种:

  • 插入排序类:直接插入排序,希尔排序
  • 选择排序类:简单选择排序,堆排序
  • 交换排序类:冒泡排序,快速排序
  • 归并排序类:归并排序

从简单性来看,非为

  • 简单算法:冒泡,简单选择,直接插入
  • 改进算法:希尔(直接插入的升级),堆(简单选择的升级),归并,快速(冒泡的升级)

性能比较

排序方法平均情况最好情况最坏情况辅助空间稳定性
冒泡排序O( n2 )O(n)O( n2 )O(1)稳定
简单选择排序O( n2 )O( n2 )O( n2 )O(1)稳定
直接插入排序O( n2 )O(n)O( n2 )O(1)稳定
希尔排序O(nlogn)~O( n2 )O( n1.3 )O( n2 )O(1)不稳定
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定
归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定
快速排序O(nlogn)O(nlogn)O( n2 )O(logn)~O( n <script type="math/tex" id="MathJax-Element-12">n</script>)不稳定

总结分析

时间复杂度

从平均情况看,最后3种改进算法要胜过希尔排序,并远远胜于前3种简单算法。

从最好情况看,反而冒泡和直接插入排序更胜一筹,也就是说,如果排序总是基本有序,反而不应该考虑4种复杂的改进算法。

从最坏情况看,堆排序与归并排序又强过排序以及其他简单排序。

空间复杂度

归并排序强调要马跑得快,就得给马吃个饱。快速排序也有相应的空间要求,反而堆排序等却都是少量索取,大量付出,对空间要求是O(1)。如果执行算法的软件所处的环境非常在乎内存使用量的多少时,选择归并排序和快速排序就不是一个很好的选择了。

稳定性

从稳定性来看,归并排序独占鳌头,对于非常在乎排序稳定性的应用中,归并排序是个好算法。

待排序数量

从待排序记录的个数来说,其记录个数n越小,采用简单排序方法越合适。反之,n越大,采用改进排序方法越合适。这也就是我们为什么要对快速排序优化时,增加了一个阈值,低于阈值时唤作直接插入排序的原因。

简单选择排序似乎没什么用,但是,如果记录的关键字本身信息量比较大(例如,关键字都是数十位的数字),此时表明其占用存储空间很大,这样移动记录所花费的时间越多,根据上表,此时简单选择排序就变得非常有优势,
原因在于它是通过大量比较后选择明确记录进行移动,有的放矢。

总之,从综合各项指标来说,经过优化的快速排序是性能最好的排序算法,但是不同的场合我们也应该考虑使用不同的算法来应对。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值