http://c.chinaitlab.com/special/cpxsf/index.html
各排序算法的关系:
直接插入排序————Shell排序
起泡排序——————快速排序
选择排序——————堆排序
排序算法比较:
排序算法 | 平均时间 | 最坏情况 | 辅助存储 |
简单排序 | O(n^2) | O(n^2) | O(1) |
快速排序 | O(nlog(n)) | O(n^2) | O(log(n)) |
归并排序 | O(nlog(n)) | O(nlog(n)) | O(n) |
堆排序 | O(nlog(n)) | O(nlog(n)) | O(1) |
基数排序 | O(d(n+rd)) | O(d(n+rd)) | O(rd) |
就平均时间性能而言,最好的是快速排序,但快速排序的最坏时间比归并和堆排序都要差。上表中的简单排序不包括希尔排序。
快速排序、堆排序、希尔排序等时间性能好的排序算法都是不稳定的。
内部排序可以达到的最快速度?
任何一个基于比较的内部排序算法,在最坏的情况下需要比较的次数至少为:log2(n!);根据斯特林公式:log2(n!) = o(nlog(n))
结论,借助于比较进行排序的算法在最坏情况下能达到的最好的时间复杂度为o(nlog(n))。
附:关于逆序数:
设 为n个不同自然数的一种排列,我们称此排列中出现前大后小的数对的个数为此排列的逆序数。 的逆序数记为 。
的逆序数 = 后面< 的数的个数
+ 后面< 的数的个数
+ ......
+ 后面< 的数的个数(0)