1

这是一个面试问题,我想知道我的分析是否正确:

“魔术选择”函数基本上会在大小为 n 的数组中生成“第 m 个”最小值。任务是使用高效算法按升序对“m”元素进行排序。我的分析是首先使用'magic select'函数来获取'mth'最小值。然后,我使用分区函数来创建一个枢轴,以获取左侧的所有较小元素。在那之后,我觉得桶排序应该有效地完成对左半部分排序的任务。

我只是想知道这是否是对“m”最小元素进行排序的最佳方法。我也看到了在这里使用快速排序的可能性。但是,我认为避免基于比较的排序可能会导致 O(n)。基数排序或堆排序(O(nlogn))也可以用于此吗?如果我没有以最好的方式做到这一点,那可能是实现这一目标的最佳方式?数组是我被允许使用的数据结构。

非常感谢!

4

1 回答 1

1

我敢肯定,在按排序顺序从数组中选择 k 个最低元素时,您不能比任何标准算法做得更好。“魔法机器”的时间复杂度是 O(n),这与从标准选择算法(如中位数算法或快速选择)获得的时间复杂度相同。

因此,您的方法似乎非常合理。我怀疑你可以渐近地做得更好。

希望这可以帮助!

于 2013-10-29T02:41:07.857 回答