【程序】
#include <stdio.h>
#define N 100
void swap(int *p,int *q) //交换
{
int t;
t=*p;
*p=*q;
*q=t;
}
int Partition(int a[],int l,int r) //一趟排序返回基准
{
int i,j,p;
p=a[l];
i=l;j=r+1;
while(i<j)
{
do{
i++;
} while(p>a[i]);
do{
j--;
}while(p<a[j]);
swap(&a[i],&a[j]);
}
swap(&a[i],&a[j]);
swap(&a[l],&a[j]);
return j;
}
int Quickselect(int a[],int l,int r,int k)
{
int s;
s=Partition(a,l,r); //返回基准
if(k-1==s)
return a[s];
else if(k-1<s) //在基准左边
Quickselect(a,l,s-1,k);
else
Quickselect(a,s+1,r,k); //在基准右边
}
int main()
{
int a[N],i,n,k,m;
printf("请输入元素个数:");
scanf("%d",&n);
printf("请输入数组元素:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("请输入第k小的数:");
scanf("%d",&k);
m=Quickselect(a,0,n-1,k);
printf("%d\n",m);
}