import java.util.Arrays; public class topk { public static void main(String[] args) { int[] num={66,7,23,45,12,43,65,8,18,28,20,44,123,6,94,67,5,27,89,111,35}; int k=7; int[] result=creatHeap(num,k); for(int i=k;i<num.length;i++) { if(num[i]>result[0]) { result[0]=num[i]; heapAdjust(result,0); } } Arrays.sort(result); for(int i=0;i<k;i++) System.out.println(result[i]); } public static int[] creatHeap(int[] num,int k) { int[] result=new int[k]; for(int i=0;i<k;i++) result[i]=num[i]; for(int i=result.length/2;i>=0;i--) heapAdjust(result,i); return result; } public static void heapAdjust(int[] num,int i) { int left=2*i+1; int right=2*(i+1); int min=i; if(i<num.length/2) { if(left<num.length&&num[left]<num[min]) min=left; if(right<num.length&&num[right]<num[min]) min=right; if(i!=min) { int tmp=num[i]; num[i]=num[min]; num[min]=tmp; heapAdjust(num,min); } } } }