前言
在
pdqsort(II)一文中,我介绍了三种常见的排序算法(插入排序、快速排序、堆排序)的优点和缺点,并不存在某种算法在任何时候都具有最好的排序效率。我们应该对不同特征的数组采用不同的排序算法。pdfsort 就是这样做的。
结合三种排序算法的优点:
- 对于短序列(小于一定长度)我们使用插入排序
- 其他情况,使用快速排序来保证整体性能
- 当快速排序效果不佳时,使用堆排序来保证最坏情况下时间复杂度仍然为
O(n*logn)
这就是 pdfsort version 1.0 :
- 对于长度小于等于
24的序列,我们使用插入排序 - 其他情况,使用快速排序(选择首个元素作为 pivot)来保证整体性能
- 当快速排序表现效果不佳时(多次选取的 pivot 都离两端很接近时
limit == 0),使用堆排序来保证最坏情况下时间复杂度仍然为O(n*logn)
那么如何让 pdfsort version 1.0 更快呢?还有什么需要改进的空间?