我正在寻找k
从输入数组返回顶级元素的有效方法。
一种方法是对数组进行排序并k
从数组末尾返回元素。
这里建议了其他方法,其中一种使用quickselect 算法,但据我了解, quickselect 仅返回k
未排序数组中的第 - 个元素。在它返回后,左侧和右侧的元素k
仍然是未排序的。
所以它应该是这样的:
while k>0{
quickselect(int[] arr, k);
k--;
}
快速选择是O(n)
,我们k
多次这样做,所以总体时间复杂度是O(n*k)
.
但帖子中的数据表明,这比O(n log n)
.
从一百万个样本中选择前 200 名意味着200 million
在前一种情况下,但20 million
在后一种情况下。显然这要好得多。
我对如何使用快速选择来选择前 200 个元素的理解是否正确?