哪个是在包含非唯一元素的未排序数组中选择第k个最大数字的最快算法?

Aja*_*mos 0 c c++ selection

可能重复:
如何在O(n)中找到长度为n的未排序数组中的第k个最大元素?

元素的数量可以在1到1千万之间变化.这是最快的选择算法吗?请注意我认为由于数组元素的重复,像AVL Trees这样的数据结构在这里不起作用?

Jef*_*ter 6

选择算法可以在O(N)时间运行.

最常见的方法是通过数组,保持你目前为止看到的K个最大数字.返回该列表的最后一个元素.正如@ChrisA在评论中指出的std::nth_element(这里记录)是使用这种方法的最快方法.

如果您总是想要最大的第K个项(并且有时会更改数据),那么请考虑将数据存储在堆中.这样更昂贵,但会为您提供数据的"实时"结构.