从n个元素的数组中获取k个最大的元素,其中n比k大

时间:2018-11-09 18:13:23

标签: algorithm time-complexity

假设您有一个长度为n的未排序数组。现在,您要从数组中提取k个最大的元素。我们也知道n比k大得多。

我幼稚的想法是对数组排序并输出k个最大的元素。那将花费O(nlog(n))。是否有一种更有效的算法可以利用n比k大得多的事实?

1 个答案:

答案 0 :(得分:4)

是的,确实存在更有效的算法。

首先获取k个元素,然后构建包含这k个元素的 min -堆。

遍历其他元素。如果当前项目大于堆顶部,请移除顶部并插入当前项目。

最后一堆将包含k个最大元素。

复杂度为O(N*logK)


还考虑平均时间为O(n)的QuickSelect算法(最坏情况直到二次方)