修改heapsort算法以从堆中一次提取k个元素

在执行heapsort时,只有一个max元素从堆中提取并与堆末尾的元素交换,然后被认为是堆外的.然后使用heapify恢复堆属性.这样做直到堆大小变为零.

而不是假设我从堆中提取两个max元素而不再在其间调用heapify.第二个max元素将是max-heap的第二个或第三个元素.对于第二个最大元素,我可以将它与堆的第二个最后一个元素交换.接下来是heapsort的类似步骤.

为了一次提取3个最大元素,第三个最大元素可以位于{second,six,seven}或{third,4th,5th}中的任何位置,这取决于第二个max-element的位置.假设我通过在各自的边界内线性搜索找到第三个最大元素的位置.

我想概括它从堆中一次提取k个元素.你能提出任何有用的见解吗?

最佳答案 这将严重损害性能,您的堆将失去其性能!

原因是您一次提取的元素越多,忽略堆的属性就越多,因为您需要在其可能的位置搜索第k个更大的元素.随着k增加,可能位置的数量也增加,当然也是非线性关系.

相关:Kth largest element in a max-heap

点赞