解题思路:根据题目的提示,按照快排的思想解题。在快排过程中,每次递归都可以确定某一个元素的位置,若该元素正处于第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]; } }