arrays - 为数组中最小的 k 个元素调整快速选择

标签 arrays algorithm sorting data-structures language-agnostic

我知道我可以通过使用 quickselect 获得第 K 个顺序统计信息(即数组中的第 k 个最小数)几乎是线性时间,但如果我需要数组的 k 个最小元素怎么办?

维基百科链接有一个用于单元素查找的伪代码,但没有用于第 k 个最小元素s 查找的伪代码。

应该如何修改 quickselect 以在线性时间内实现它(如果可能)?

最佳答案

我相信在使用 quickselest 找到第 k 个静态变量后,您会自动发现结果数组的前 k 元素是 k 最小的元素,可能只是未排序。

此外,quickselect 实际上对第 k 个统计数据进行分区:第 k 个统计数据之前的所有元素都较小(或等于),并且后面的所有元素都大于或等于。这很容易证明。

请注意,例如对于 C++ nth_element

The other elements are left without any specific order, except that none of the elements preceding nth are greater than it, and none of the elements following it are less.

如果您不仅需要 k 个最小元素,还需要排序 k 个最小元素,您当然可以在快速选择之后对它们进行排序。

关于arrays - 为数组中最小的 k 个元素调整快速选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31270450/

相关文章:

c++ - 子集和实现

arrays - 最多k个相邻的1s(最大值限制邻居)

c - 判断数组是否完全排序

c++ - 在模板实例化中使用运行时值

c - C数组中有多少个元素是满的

c - 将元素添加到 C 中的结构数组

algorithm - 水库采样: why is it selected uniformly at random

algorithm - Python 快速排序调试

Java 字符串数组

java - 创建集合数组