对于第k大,我们可以用堆排序求前k大,还可以用快速排序的思想,求出第k大,我们会发现,当求出的下角标等于我们想要的k时,就是第k大元素了.
import java.util.Scanner;
public class demo {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = {1,4,7,8,9};
int ans = solve(a,2);
System.out.println("ans: "+ans);
}
private static int solve(int[] a, int k) {
int l = 0;
int r = a.length - 1;
int index = 0;
while(index!=k){
index = qucik_sort(a,l,r);
if(index<k){
l = index + 1;
}else if(index>k){
r = index - 1;
}
}
return a[index];
}
private static int qucik_sort(int[] a, int l, int r) {
if(l<r){
int i = l;
int j = r;
int temp = a[i];
while(i<j){
while(i<j&&a[j]>=temp){
j--;
}
a[i] = a[j];
while(i<j&&a[i]<=temp){
i++;
}
a[j] = a[i];
}
a[i] = temp;
return i;
}
return -1;
}
}