将降序序列按升序排序的最佳排序算法是什么?



当有一个数组中数据从开始按降序存储时,如5, 4, 3, 2, 1,哪种排序算法(快速排序,归并排序…)是按升序排序该数组的最佳方法?,为什么?

自然归并排序或TimSort(类似于自然归并排序)的变体将扫描递增或递减序列,并在遇到递减序列时反转递减序列。如果整个数组是递减序列,那么初始扫描将在反转数组时对整个数组进行排序。

在经典排序算法中,当输入(几乎)按降序排序时,堆排序会做得很好,因为那时最大堆构建阶段将(几乎)不涉及交换(而当输入已经按升序排序时,大多数交换将发生)。

请注意,排序的速度取决于许多因素(如数据类型、比较函数、并行计算的可用性、内存组织等)。参见堆排序与其他排序的比较。

最好的方法是避免排序,只对进行反向序列。
是一个非常简单快速的线性算法。

最新更新