函数将a[]的第一个元素视为支点数,并重新排列数组,使小于或等于支点数的所有元素位于数组的左侧,而大于支点数的所有元素位于右侧。此外,它还会移动该支点数,使它成为左边元素的最后一个元素。返回值是左边部分的元素数。以下是在数组大小为 n n n的数组a[]中找出第 k k k小元素代码,假设 k < n k<n k<n,给出代码中空白部分的代码。
int kth_smallest (int a[], int n, int k)
{
int lend = partition (a, n);
if (lend+1==k)
{
return a [lend];
}
if (lend+1 > k)
{
return kth_smallest (________);
}
else
{
return kth_smallest (________);
}
}
根据代码推算,lend应该是根据parttion分组后。左边组元素的个数。
如果左边的元素数刚好等于你所要寻找的第几小,那么根据之前的算法,第k个元素就是第k小的的。
如果不是就在剩下的范围内,继续选取
(a, lend, k)
(a+lend+1, n–lend–1, k–lend–1)