我的分析用于确定最佳排序算法来解决此任务是否正确?

时间:2013-10-28 06:04:07

标签: algorithm sorting big-o asymptotic-complexity

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

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

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助!