思路:

快速排序是一种分治策略,通常以当前表头元素为基准值(下标mid),每一次排序都会把基准值排在最后的位置上,即确定为第n-mid大的元素(顺序),且会把当前表 左右划分  为小于和大于该基准值的两个子表。再重复上述方法对左右子表排序即可获得有序表。
可以看到每次排序都会得到一个基准值,而要找的元素为基准值的下标为 k (n-K)的元素。由于快排基准值划分左右子表的特性,可以把查找基准值的过程视为二分查找的过程。

代码:

int res=-1;
int part(int *a,int low,int high){//确定基准值
    int pos=a[low];
    while(low<high){
        while(low<high && a[high]>=pos) high--;
        a[low]=a[high];
        while(low<high && a[low]<=pos) low++;
        a[high]=a[low];
    }
    a[low]=pos;
    return low;
}
void my_qsort(int *a,int low,int high,int k){//快排
    int mid=part(a,low,high);
    if(mid==k) res=a[mid];//如果当前基准值下标与k对应,得到第K大元素
    else if(mid<k) my_qsort(a,mid+1,high,k);//在右子表寻找
    else my_qsort(a,low,mid-1,k);//在左子表寻找
}
int findKth(int* a, int aLen, int n, int K ) {
    // write code here
    my_qsort(a,0,n-1,n-K);
    return res;
}