第K大的数
//递归
#include<stdio.h>
int find(int a[],int k,int l,int r){
int ql=l,qr=r;
int t=a[ql];
while(ql<qr){
while(ql<qr&&t>=a[qr])qr--;
while(ql<qr&&t<=a[ql])ql++;//找到一个比t大的数和一个小的数
if(ql<qr){ //交换位置
int temp=a[qr];
a[qr]=a[ql];
a[ql]=temp;
}
}
a[l]=a[ql]; //第L个元素于第ql个交换位置
a[ql]=t;
if(ql==k)return a[k];
else if(ql>k)return find(a,k,l,ql-1);
else if(ql<k)return find(a,k,ql+1,r);
}
int main(){
int d[]={13,48,43,96,98,8},k=3,n=6;
printf("%d\n",find(d,k-1,0,n-1));
}