【发布时间】:2018-11-10 09:35:37
【问题描述】:
QuickSelect 算法是否适用于重复值?
如果我有一个数组
int[] array = {9, 8, 7, 6, 6, 6, 5, 0, 1, 2, 3, 4, 5, 5, 7, 200};
即使有重复,它是否能够得到第k个最小的元素?
【问题讨论】:
-
是的,它会工作,并为 K 的范围返回相同的值。
-
你能详细解释一下吗?我们说如果我们在例如中间选择一个枢轴,那么我们进行分区,如果 k 小于枢轴,我们只需要查看左子数组。所以现在我们知道第 k 个元素必须在左侧的区域 k-1 中。但是如果有重复的值你不能说k-1个值?
-
在分区过程中,必须确保两个子数组中没有一个为空。这保证了最终只剩下一个元素。
标签: algorithm sorting big-o quickselect