排序法 | 平均时间 | 最坏情况 | 最好情况 | 稳定度 | 额外空间 | 备注 |
直接插入 | 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
时间: 2024-10-29 05:11:46