使用最小堆对k排序的数组进行排序

时间:2014-01-13 08:55:21

标签: algorithm sorting language-agnostic

对k-排序数组进行排序的一个很好的解决方案(每个元素最远离目标位置k),

1) Create a Min Heap of size k+1 with first k+1 elements. This will take O(k) time. 

2) One by one remove min element from heap, put it in result array, and add a new element to heap from remaining elements.

overall complexity will be O(k) + O((n-k)*logK)

我无法理解使用堆技术进行k排序的数组的相关性。即使阵列没有进行k排序,这也不会起作用吗?

2 个答案:

答案 0 :(得分:2)

当然,当数组未进行k排序时,这将不起作用。

因为排序后的第一个元素将始终是第一个k + 1个元素中的最小元素,依此类推。

@leventov向我们展示了一个例子。

答案 1 :(得分:1)

答:从数组中找到k个最小的数字(不一定是排序的):
您认为在O(k) + O((n-k)*logK)时间内完美运行的方法。

B:排序数组:
你可以在每一步找到大小为k的堆中的最小数字,但是如果数组中的最小数字位于索引k + 2怎么办? 您将无法将其放置在算法的第一步中,直到您插入它为止,您将输出2个数字,声称它们比原始最小值<

所以,你肯定希望让他们从排序位置移开not more than k