就n个不同整数的数组中k个最小整数的就地排序算法

时间:2010-10-20 17:26:08

标签: algorithm sorting

是否存在就地算法来将n个不同整数的数组中的k个最小整数排列为1< = k< = n?

我相信计数排序可以为此修改,但我似乎无法弄清楚如何? 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

selection sort怎么样?它在O(n ^ 2)中运行。在找到k个最小元素后停止。

答案 1 :(得分:1)

您是否要对数组进行分区,以便k个最小元素是前k个元素(不一定是排序顺序)?如果是这样,你正在寻找的是在O(n)中运行的广义中位数查找算法(只是google for median find算法)。

如果您可以使用在线性时间内以高概率完成的随机算法,那么您需要做的就是随机选择枢轴,这大大简化了实现。

答案 2 :(得分:0)

您可以使用随机选择在O(n)时间内选择第k个最小整数,然后在该元素上进行分区,然后对k个最小元素使用quicksort。这使用O(1)附加内存并以总时间O(n + k log k)运行。

答案 3 :(得分:0)

您正在寻找selection algorithm。 BFPRT将为您提供有保障的最坏情况O(n)性能,但它非常复杂。

相关问题