京东秒杀
国美-超级5
索尼Xperia旗舰
限时优惠页 - 京东
自营热卖

十大排序算法原理及实现

对酒眉 1年前   阅读数 95 0

算法分类
十种常见排序算法可以分为两大类:
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 
根据使用内外存分类
排序分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。八大排序指内部排序。

算法复杂度

相关概念
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
 

1、为什么比较排序算法的时间下界是O(nlogn)?
所谓的比较排序是指通过比较来决定元素间的相对次序。
“定理:对于含n个元素的一个输入序列,任何比较排序算法在最坏情况下,都需要做Ω(nlgn)次比较。”也就是说,比较排序算法的运行速度不会快于nlgn,这就是基于比较的排序算法的时间下界。


通过决策树(Decision-Tree)可以证明这个定理,决策树的叶子代表可能的排序结果,则树的高度就是比较排序的最多比较次数,n个元素的二叉决策树有n!个不重复叶子节点(每个叶子结点代表一个排序结果,可能的排序结果是n的排列组合,故有n!个),n!个叶子节点的二叉树的高度h=Ω(nlogn)

郑州不孕不育医院那家好:http://jbk.39.net/yiyuanfengcai/tsyl_zztjyy/1449/
根据上面的证明,我们知道任何比较排序算法的运行时间不会快于nlgn。那么我们是否可以突破这个限制呢?当然可以,接下来我们将介绍三种线性时间的排序算法,它们都不是通过比较来排序的,因此,下界O(nlogn)对它们不适用。
分别是计数排序(Counting Sort)(O(n+k))、桶排序(Bucket Sort)(O(n+k))和基数排序(Radix Sort)(O(n*k))
郑州妇科医院:http://jbk.39.net/yiyuanfengcai/yyjs_sysdfkyy/


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: