题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
return qfindKth(a, 0, n-1, K);
}
int qfindKth(vector<int> &a, int left, int right, int K){//自己构建的快速排序算法
int l = left,r = right;
int ans = a[left];
while(l<r){
while(l<r && a[r] <= ans) r--;
a[l] = a[r];
while(l<r && a[l] >= ans) l++;
a[r] = a[l];
}
a[l] = ans;
if(l == K-1) return a[l];//如果已经是第k个了,就返回,否则就接着快速排序
else if(l > K-1) return qfindKth(a, 0, l-1, K);
else return qfindKth(a,l+1, right,K);
}
};