我在理解快速选择算法时遇到问题。我知道它基于快速排序算法(我很熟悉),它可以为您提供所需的结果,可能会使数组的一部分未排序。现在这是我遇到困难的地方。问题是从数组中找到第二个最小的元素:
int a[4] = {1,3,5,2} ;
现在假设我们随机选择枢轴然后根据这篇文章我们有以下条件:
k == pivot
. 那么你已经找到了第 k 个最小的了。这是因为分区的工作方式。恰好有 k - 1 个元素小于第 k 个元素。k < pivot
. 然后第 k 个最小的在枢轴的左侧。k > pivot
. 然后第 k 个最小的在枢轴的右侧。要找到它,您实际上必须在右侧找到 k-pivot 最小数字。
如果有人能解释k==pivot
我们如何找到第 k 个(在我的情况下是第二个最小元素),我将不胜感激。此外,如果k < pivot
我们是否重复枢轴左侧的过程?