如何对单调交替的数组进行排序

时间:2012-10-27 21:58:13

标签: arrays sorting

有一个数组在一段时间内单调递增,然后逐渐减少,再次增加......等[1,2,3,4,5,3,1,-1,-3,2,5,67,90,8,7,3,0]。排序这个数组的最佳方法是什么? Stackoverflow中的一些相关问题建议K-Way Merge Sort,但没有提供实现细节。

那么排序它的理想方式是什么?任何光滑的方法是否会提供比O(N*log N)给出的好的quicksort更好的性能,以便值得使用?如果K-Way Merge Sort是要做的事情,请提供一些实施细节,我在互联网上找不到一个!

2 个答案:

答案 0 :(得分:1)

你想要Timsort,它利用自然运行。

答案 1 :(得分:1)

我认为与预处理的自然合并将在O(n)中进行。

  1. 反转降序子阵列中的顺序 - 总计O(n)
  2. 自然合并 - O(n):http://www.algorithmist.com/index.php/Merge_sort#Natural_mergesort