【发布时间】:2013-10-28 06:04:07
【问题描述】:
这是一个面试问题,我想知道我的分析是否正确:
“魔术选择”函数基本上会在大小为 n 的数组中生成“第 m 个”最小值。任务是使用高效算法按升序对“m”元素进行排序。我的分析是首先使用'magic select'函数来获取'mth'最小值。然后,我使用分区函数来创建一个枢轴,以获取左侧的所有较小元素。在那之后,我觉得桶排序应该有效地完成对左半部分排序的任务。
我只是想知道这是否是对“m”个最小元素进行排序的最佳方法。我也看到了在这里使用快速排序的可能性。但是,我认为避免基于比较的排序可能会导致 O(n)。基数排序或堆排序(O(nlogn))也可以用于此吗?如果我没有以最好的方式做到这一点,那可能是实现这一目标的最佳方式?数组是我被允许使用的数据结构。
非常感谢!
【问题讨论】:
-
您能详细说明一下吗?预言机有多快?预言机每次都绕着同一个位置m旋转,还是可以控制?
-
我不太确定我理解你所说的 oracle 是什么意思。但是,为这个问题添加更多内容:这是一个关于算法的问题。 'm' 可以是用户定义的,m 在 (0..n-1) 范围内,其中 n 是数组的大小。
-
我使用“oracle”来指代您的“magic select”对象。你知道使用“魔术选择”对象的运行时间吗?
-
O(n) 用于“魔术选择”。非常感谢您花时间回复!
标签: algorithm sorting big-o asymptotic-complexity