我有一系列元素,比如a1,a2,...,an。 (n~4 * 10 ^ 7)
输入将主要排序。更具体地说,任何小于a_i的元素都将位于左侧,或者非常接近右侧(~300个元素)。
如何有效地对此序列进行排序?
答案 0 :(得分:0)
你可以使用一堆N个元素来做到这一点,其中N是最大重叠(在你的情况下N = 300)。
以空heap开头。
对于序列中的每个元素:
将元素添加到堆
如果堆有多于N个元素,则输出(并从堆中删除)最小元素
最后输出堆中的其余元素。
这将具有复杂度O(nlogN)