题目:给定一个数组[2,5,7,3,8],找到第 k 大的元素
方法:使用快排的思想。
public class FindKthGreat{
public static void main(String[] args){
int[] arr = {2,5,7,3,8};
System.out.println(findKthGreat(arr, 0, arr.length - 1, 3));
}
public static int findKthGreat(int[] arr,int start,int end,int k){
if (start > end){
return -1;
}
int standard = arr[start];
int left = start;
int right = end;
while (left<right){
while (left<right && arr[right] >= standard){
right--;
}
while (left<right && arr[left] <= standard){
left++;
}
if (left<right){
int temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
}
arr[start] = arr[left];
arr[left] = standard;
if (left == arr.length-k){
return arr[left];
}else if (left<arr.length-k){
return findKthGreat(arr,left+1,end,k);
}else {
return findKthGreat(arr,start,left-1,k);
}
}
}