常用的排序算法有很多,本文在总结不同排序算法之前先从不同的维度来回顾一下排序算法:

【时间复杂度】

     也就是指排序所消耗的总时间。对于一个序列List(长度为N)几种不同的性能分别是:1. 最好的性能上O(N); 2. 平均的性能是O(N*log N);3. 最坏的性能是O(N^2)

     其中关于对数的运算有如下法则:

     1、a^(log(a)(b))=b;
     2、log(a)(MN)=log(a)(M)+log(a)(N);
     3、log(a)(M÷N)=log(a)(M)-log(a)(N);
     4、log(a)(M^n)=nlog(a)(M);
     5、log(a^n)(M)=1/nlog(a)(M);

【空间复杂度】

主要是指排序算法实现的时候所占用的内存大小(或进行磁盘写操作时所占用的存储空间)。有时候可以牺牲一些存储空间来换取更好的时间效率

【排序的基本思想】

要实现排序功能,大概有几种思路可以实现:插入法、交换法、选择法、合并法

【稳定性】

通常算法的稳定性是指:当一个无序序列中存在两个相等的记录P和Q(P在前Q在后)。如果一个算法是稳定的,那么得到排序结果仍然是P在前Q在后,而不稳定的排序算法则可能是P在后Q在前的情况。

无序序列( P:(3,1)  Q:(3,7) ) (4,1) (3,1) (3,7) (5,6)
稳定排序(P,Q顺序未发生变化) (3,1) (3,7) (4,1) (5,6)
不稳定排序(P,Q顺序发生了变化) (3,7) (3,1) (4,1) (5,6)

 

 

 

 稳定排序算法(n是序列的元素个数,k是不同键值的数量)

排序算法 最大时间复杂度
冒泡排序(bubble sort)(亦称:简单排序) O(n^2)
鸡尾酒排序(Cocktail sort,双向的冒泡排序)   O(n^2)
插入排序(insertion sort) (亦称:简单排序) O(n^2)
Gnome 排序  O(n^2)
原地合并排序  O(n^2)
桶排序(bucket sort)  O(n); 需要 O(k) 额外空间
计数排序(counting sort)   O(n+k); 需要 O(n+k) 额外空间
合并排序(merge sort)  O(nlog n); 需要 O(n) 额外空间
二叉排序树排序 (Binary tree sort)   O(nlog n)期望时间; O(n^2)最坏时间; 需要 O(n) 额外空间
鸽巢排序(Pigeonhole sort)   O(n+k); 需要 O(k) 额外空间
基数排序(radix sort)  O(n·k); 需要 O(n) 额外空间
图书馆排序  O(nlog n) with high probability,需要 (1+ε)n额外空间

 

 

 

 

 

 

 

 

 

 

 

 

不稳定排序算法(n是序列的元素个数,k是不同键值的数量

排序算法 最大时间复杂度
选择排序(selection sort)  O(n^2)
希尔排序(shell sort) O(nlog n) 
组合排序 O(nlog n)
堆排序(heapsort) O(nlog n)
平滑排序 O(nlog n)
Introsort O(nlog n)
快速排序(quicksort) O(nlog n) 期望时间,O(n^2) 最坏情况; 对于大的、乱数列表一般相信是最快的已知排序
Patience sorting O(nlog n+ k) 最坏情况时间,需要 额外的 O(n+ k) 空间,也需要找到最长的递增子串行(longest increasing subsequence)

 

 

 

 

 

 

 

 

主要常用算法综合比较:

排序方式 时间复杂度 空间复杂度 稳定性 复杂性
平均 最坏 最好
插入排序 O(N^2) O(N^2) O(N) O(1) 稳定 简单
希尔排序 O(N^1.3)     O(1) 不稳定 较复杂
冒泡排序 O(N^2) O(N^2) O(N) O(1) 稳定 简单
快速排序 O(Nlog2(N)) O(N^2) O(Nlog2(N)) O(log2(N)) 不稳定 较复杂
选择排序 O(N^2) O(N^2) O(N^2) O(1) 不稳定 简单
堆排序 O(Nlog2(N)) O(Nlog2(N)) O(Nlog2(N)) O(1) 不稳定 较复杂
归并排序 O(Nlog2(N)) O(Nlog2(N)) O(Nlog2(N)) O(N) 稳定 较复杂
基数排序 O(D(N+R)) O(D(N+R)) O(D(N+R)) O(R) 稳定 较复杂

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2013-04-30 22:51  wbqsln  阅读(154)  评论(0编辑  收藏  举报