public class Finder {
public int findKth(int[] a, int n, int K) {
// write code here
int li = 0, lo = n;
K = n - K; // 第K大的元素 --> 数组升序排序后索引为length - K;
while(li < lo) {
// 在[li, lo)中选一个分界点
int mid = quickSort(a,li,lo);
if(mid > K) { // 第K大的元素在[li,mid)中
lo = mid;
} else if(mid < K) { // 第K大元素在[mid+1,lo)中
li = mid+1;
} else {
return a[mid]; // 找到第K大元素
}
}
return -1;
}
public static int quickSort(int[] arr, int l, int r) {
if(l>=r) return l;
r--;
int proit = arr[l];
while(l<r) {
while(l<r) {
if(arr[r] > proit) {
r--;
} else {
arr[l++] = arr[r];
break;
}
}
while(l<r) {
if(arr[l] < proit) {
l++;
} else {
arr[r--] = arr[l];
break;
}
}
}
arr[l] = proit;
return l;
}
}