输入数据,随机选择第几个数(有点类似快排的策略)。不是排序之后在选择第几个数:
#include <stdio.h>
int partition(int a[],int p,int q){
int temp=a[p];
int tp;
int i=p,j=p+1;
for(;j<=q;j++){
if(a[j]<temp){
tp=a[i];
a[i]=a[j];
a[j]=tp;
i++;
}
if(a[p]!=temp){
p=j;
}
}
if(i!=p){
temp=a[i];
a[i]=a[p];
a[p]=temp;
p=i;
}
return p;
}
int randselect(int a[],int p,int q,int k){
int m=partition(a,p,q);
if(m==k)
return a[m];
else if(k<m)
randselect(a,p,m-1,k);
else
randselect(a,m+1,q,k);
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int k;
scanf("%d",&k);
int m=randselect(a,0,n-1,k-1);
printf("%d",m);
}