1.原理:
运用快速排序的方法,把数组s[i,j]分成两个子列,判断基准数在数组的位置 p 和(k-1)的大小;
若 p == k-1,则 s[p] 就是第 k 大的数;
若 p < k-1 ,则在 s[p+1,j] 中查找;
若 p > k-1, 则在 s[i,p-1] 中查找;
2.代码:
void find_Kth(int a[],int l,int r,int n)
{
if(l <= r)
{
int i=l,j=r,x=a[i];
while(i < j)
{
while(i<j && a[j]>=x)
j--;
if(i<j){
a[i] = a[j];
i++;
}
while(i<j && a[i]<=x)
i++;
if(i<j){
a[j] = a[i];
j--;
}
}
a[i] = x;
if(i < n-1)
find_Kth(a,i+1,r,n);
else if(i > n-1)
find_Kth(a,l,i-1,n);
else if( i==(n-1))
cout << "第 " << n << " 大的数为:" << a[i] << endl;
}
}