算法导论-排序

        排序被认为是算法研究中最基础的问题。常说的排序算法有插入排序、归并排序、堆排序、快速排序、计数排序、基数排序和桶排序。

        其中插入排序、归并排序、堆排序和快速排序都是通过比较完成排序的。我们称这类排序为比较排序。算法导论中给出了相关证明:比较排序的最坏情况都要讲过nlgn次比较。因此归并排序和堆排序是渐进最优的,并且已知的比较排序最多就是在常数因子上超过了它们。

        其中计数排序、基数排序和桶排序都属于线性时间排序,这类排序不是通过比较来进行排序的。因此下界nlgn不适用于它们。


1.插入排序


   最坏情况下时间复杂度为n2,由于插入排序的内层循环紧凑,因此对于小规模的输入是一种非常快的原址排序方法。

(如果输入数组中仅有常数个元素要在排序中存储在数组之外,则称算法为原址的。我的理解:这是基于Cache命中给出的简易解释。)

2.归并排序

具体算法在《算法导论-分治法》中有介绍。归并排序较插入排序有更好的渐进运行时间nlgn,但是由于Merger过程不是原址的

3.堆排序

堆排序的时间复杂度是nlgn,但与归并排序不同,堆排序属于原址排序。“堆”是一种数据结构,这一词就是源于堆排序,但是目前被很多地方使用,且意思也发生了变化。

(1)“堆”是什么:


        在堆排序算法中,通常使用最大堆,而最小堆主要用于构造优先队列。

(2)堆排序




4.快速排序

与归并排序一样,快速排序利用了分治的思想。下列是对一个数组A[p,r]进行快速排序的三步分治过程:


举例子说明如下:


5.计数排序


6.基数排序

  


7.桶排序






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值