码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法性能及选择总结

时间:2015-06-15 16:11:13      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

排序法 平均时间 最坏情况 最好情况 稳定度 额外空间 备注
直接插入 O(n2) O(n2) O(n) 稳定 O(1) 大部分已排序时较好(简单)
希尔 O(nlogn) O(nlogn) 与步长相关 不稳定 O(1) n小时较好(较复杂)
冒泡 O(n2) O(n2) O(n) 稳定 O(1) n小时较好(简单)
快排 O(nlogn) O(n2) O(nlogn) 不稳定 O(logn) n大时较好,基本有序时反而不好(较复杂)
直接选择 O(n2) O(n2) O(n2) 不稳定 O(1) n小时较好(简单)
堆排序 O(nlogn) O(nlogn) O(nlogn) 不稳定 O(1) n大时较好(较复杂)
归并 O(nlogn) O(nlogn) O(nlogn) 稳定 O(n) n大时较好(较复杂)
基数 O(d(n+r)) O(d(n+r)) O(d(n+r)) 稳定 O(r) d为位数,r为基数(较复杂)
计数 O(n+k) O(n+k) O(n+k) 稳定 O(n+k) 优于比较排序法,0~k为数值范围
桶排序 O(n+c)

O (nlogn)

所有的元素落到一个桶中

O(n) 稳定 O(n+m)

n为数的个数,

m为桶数c = n*(logn-logm)桶越多,效率越高,n=m,达到O(n),

但是占用很大的空间,桶内可用快排等

 

 

1、稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。


2、计算的复杂度(最差、平均、和最好表现),依据串行(list)的大小(n)。一般而言,好的表现是O(n log n),且坏的行为是O(n2)。对于一个排序理想的表现是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(n log n)。

 

 

参考:

http://www.360doc.com/content/13/0921/16/9615799_316009153.shtml

http://blog.sina.com.cn/s/blog_4080505a0101iewt.html

排序算法性能及选择总结

标签:

原文地址:http://www.cnblogs.com/gallenhu/p/4577153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!