pdqsort(III)| 青训营笔记

50 阅读1分钟

前言

pdqsort(II) 一文中,我介绍了三种常见的排序算法(插入排序、快速排序、堆排序)的优点和缺点,并不存在某种算法在任何时候都具有最好的排序效率。我们应该对不同特征的数组采用不同的排序算法。pdfsort 就是这样做的。

结合三种排序算法的优点:

  1. 对于短序列(小于一定长度)我们使用插入排序
  2. 其他情况,使用快速排序来保证整体性能
  3. 当快速排序效果不佳时,使用堆排序来保证最坏情况下时间复杂度仍然为 O(n*logn)

这就是 pdfsort version 1.0 :

image.png

  1. 对于长度小于等于 24 的序列,我们使用插入排序
  2. 其他情况,使用快速排序(选择首个元素作为 pivot)来保证整体性能
  3. 当快速排序表现效果不佳时(多次选取的 pivot 都离两端很接近时 limit == 0 ),使用堆排序来保证最坏情况下时间复杂度仍然为 O(n*logn)

那么如何让 pdfsort version 1.0 更快呢?还有什么需要改进的空间?