解题思路:根据题目的提示,按照快排的思想解题。在快排过程中,每次递归都可以确定某一个元素的位置,若该元素正处于第K大的位置,则直接返回该值;否则,在快排之后返回第K大的元素值。需注意的是,如果按照升序排列,第K大的元素位置在数组a的n-K的位置上。
import java.util.*;
public class Finder {
public int findKth(int[] a, int n, int K) {
// write code here
return quickSort(a,0,n-1,n-K);
}
public int quickSort(int[] a,int low,int high,int K){
int temp=a[low];
int i=low;
int j=high;
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;
if(i==K){
return temp;
}
if(low<i-1){
quickSort(a,low,i-1,K);
}
if(j+1<high){
quickSort(a,j+1,high,K);
}
return a[K];
}
}
京公网安备 11010502036488号