[编程题]寻找第K大
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:[1,3,5,2,2],5,3
返回:2
解题思路:1.从大到小进行快速排序;
2.返回a[K-1];
import java.util.*;
public class Finder {
public int findKth(int[] a, int n, int K) {
quickSort(a, 0, n-1);
return a[K-1];
}
//快速排序(从大到小)
public void quickSort(int[] array,int left,int right){
if(right - left>1){
//说明区间中至少有两个元素
//按照基准值对[left,right)区间进行分割
int div=partation(array,left,right);
//递归排基准值的左半侧
quickSort(array,left,div);
//递归排基准值的右半侧
quickSort(array,div+1,right);
}
}
//找基准值
public int partation(int[] a, int low, int high) {
int key = a[low];
while(low < high) {
while(low < high && a[high] <= key){
high--;
}
a[low] = a[high];
while(low < high && a[low] >= key) {
low++;
}
a[high] = a[low];
}
a[low] = key;
return low;
}
}