每种排序的总结见http://www.cnblogs.com/gaochundong/p/comparison_sorting_algorithms.html#intro_sort
内省排序(Introsort)是由 David Musser 在 1997 年设计的排序算法。这个排序算法首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。采用这个方法,内省排序既能在常规数据集上实现快速排序的高性能,又能在最坏情况下仍保持 O(nlog n) 的时间复杂度。由于这两种算法都属于比较排序算法,所以内省排序也是一个比较排序算法。
微软 .NET 框架中 Array.Sort 方法的实现使用了内省排序(Introspective Sort)算法:
- 当分区大小(Partition Size)小于 16 个元素时,使用插入排序(Insertion Sort)算法。
- 当分区的数量超过 2 * LogN 时,N 是输入数组的范围,使用堆排序(Heapsort)算法。
- 否则,使用快速排序(Quicksort)算法。
这种实现也是不稳定的排序,也就是说,如果两个元素相等,则并不能保证它们的顺序,而相反一个稳定的排序算法则会保持相等元素原来的顺序。
如果数组的长度为 n ,则该实现的平均情况为 O(n log n) ,最坏情况为 O(n2)。