【发布时间】:2018-09-21 16:01:42
【问题描述】:
我最近一直在研究算法,并进入了随机选择算法。我试图弄清楚,偶然发现了这个网站
https://www.geeksforgeeks.org/kth-smallestlargest-element-unsorted-array-set-2-expected-linear-time/
其中显示了一个代码,几乎没有解释它是如何工作的。
它可以找到第 k 个最小的元素,但是如何更改它以显示第 k 个最大的元素?
特别是这个方法
int kthSmallest(int arr[], int l, int r, int k)
{
// If k is smaller than number of elements in array
if (k > 0 && k <= r - l + 1)
{
// Partition the array around a random element and
// get position of pivot element in sorted array
int pos = randomPartition(arr, l, r);
// If position is same as k
if (pos-l == k-1)
return arr[pos];
// If position is more, recur for left subarray
if (pos-l > k-1)
return kthSmallest(arr, l, pos-1, k);
// Else recur for right subarray
return kthSmallest(arr, pos+1, r, k-pos+l-1);
}
// If k is more than number of elements in array
return Integer.MAX_VALUE;
}
【问题讨论】:
-
to show the kth largest element?只需寻找length-k-th 最小