这是一个面试问题,我想知道我的分析是否正确:
“魔术选择”函数基本上会在大小为 n 的数组中生成“第 m 个”最小值。任务是使用高效算法按升序对“m”元素进行排序。我的分析是首先使用'magic select'函数来获取'mth'最小值。然后,我使用分区函数来创建一个枢轴,以获取左侧的所有较小元素。在那之后,我觉得桶排序应该有效地完成对左半部分排序的任务。
我只是想知道这是否是对“m”最小元素进行排序的最佳方法。我也看到了在这里使用快速排序的可能性。但是,我认为避免基于比较的排序可能会导致 O(n)。基数排序或堆排序(O(nlogn))也可以用于此吗?如果我没有以最好的方式做到这一点,那可能是实现这一目标的最佳方式?数组是我被允许使用的数据结构。
非常感谢!