高效排序算法——希尔排序、堆排序、归并排序、快速排序

如标题,这里讨论的是基于比较的排序算法中最高效的三种算法和希尔排序。堆排序、归并排序、快速排序的平均时间复杂度均为O(NlogN)。前面有介绍过O(N2)的三种简单排序算法(见三大简单排序算法——插入、选择、冒泡),其中实际表现最好的要属希尔排序。可以证明通过交换相邻元素来进行排序的任何算法都需要O(N2)的平均时间,其中插入排序虽然不是通过交换来排序,但是可以等价为交换的操作,依然是O(N2)。这里讨论的堆排序、归并排序、快速排序均是平均时间复杂度O(NlogN)的算法,实际表现最好的要属快速排序。可以证明O(NlogN)是基于比较的排序算法的时间复杂度下界。所以这三种排序算法都是渐进最优的。最后介绍一下C++的algorithm库中的sort()函数,一般我们自己写的排序算法优化不够时都是达不到这个效率的。还有会对这些算法在大规模数据下的运行时间进行一个简单的测试。

排序算法相关知识

逆序:逆序是指数组中具有性质 i>j i > j 但是 A[i]<A[j] A [ i ] < A [ j ] 的序偶 (A[i],A[j]) ( A [ i ] , A [ j ] ) 。(升序排列的情况,反之亦然)

排序的过程就是消除逆序的过程。很明显逆序的最大数目为 N1i=1i=N(N

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值