public class test30{ public static void main(String args[]){ int array[]={3,2,5,1,4}; int temp[] = findTopN(array,4); for(int i=0;i<temp.length;i++){ System.out.print(temp[i]+","); } } public static int[] findTopN(int[] array, int n){ int[] temp = new int[n]; if(n<=0) return temp; int i = 0; int j = array.length-1; int index = partition(array,i,j); while(index != n){ if(index>n){ j = index-1; index = partition(array,i,j); }else{ i = index+1; index = partition(array,i,j); } } for(int k=0;k<n;k++){ temp[k]=array[k]; } return temp; } private static int partition(int[] array, int i, int j) { int key = array[i];//i while(i<j){ while(i<j&&array[j]>=key){//先j j--; } if(i<j){ array[i++] = array[j]; } while(i<j&&array[i]<=key){//后i i++; } if(i<j){ array[j--] = array[i]; } } array[i] = key; return i; } }
海量数据时: