是否存在就地算法来将n个不同整数的数组中的k个最小整数排列为1< = k< = n?
我相信计数排序可以为此修改,但我似乎无法弄清楚如何? 任何帮助将不胜感激。
答案 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)性能,但它非常复杂。