import java.util.Arrays;/**
* 2000个数组,每个200大小,数组内有序,求所有数值的TOP1000
* @author dell
*
*/publicclassPrintMaxTop{publicstaticclassHeapNode{public int value;public int arrNum;public int index;publicHeapNode(int value, int arrNum, int index){this.value = value;this.arrNum = arrNum;this.index = index;}}publicstaticvoidprintTopK(int[][] matrix, int topK){
int heapSize = topK;
HeapNode[] heap =newHeapNode[heapSize];for(int i =0; i != heapSize; i++){
int index = matrix[i].length -1;
heap[i]=newHeapNode(matrix[i][index], i, index);heapInsert(heap, i);}
System.out.println("TOP "+ topK +" : ");for(int i =0; i != topK; i++){if(heapSize ==0){break;}
System.out.println(heap[i].value +" ");}}publicstaticvoidheapInsert(HeapNode[] heap, int index){while(index !=0){
int parent=index-1;if(heap[parent].value< heap[index].value){swap(heap, parent, index);
index = parent;}else{break;}}}publicstaticvoidheapify(HeapNode[] heap, int index, int heapSize){
int left = index *2+1;
int right = index *2+2;
int largest = index;while(left < heapSize){if(heap[left].value > heap[index].value){
largest = left;}if(right < heapSize && heap[right].value > heap[largest].value){
largest = right;}if(largest != index){swap(heap, largest, index);}else{break;}
index = largest;
left = index *2+1;
right = index *2+2;}}publicstaticvoidswap(HeapNode[] heap, int index1, int index2){
HeapNode tmp = heap[index1];
heap[index1]= heap[index2];
heap[index2]= tmp;}publicstatic int[][]generateRandomMatrix(int row, int col,int maxValue){if(row <0|| col <0){returnnull;}
int[][] matrix =newint[row][col];for(int i =0; i != matrix.length; i++){for(int j =0; j != matrix[i].length; j++){
matrix[i][j]=(int)(Math.random()* maxValue);}
Arrays.sort(matrix[i]);}return matrix;}publicstaticvoidprintMatrix(int[][] matrix){for(int i =0; i != matrix.length; i++){for(int j =0; j != matrix[i].length; j++){
System.out.print(matrix[i][j]+" ");}
System.out.println();}}publicstaticvoidmain(String[] args){
int[][] matrix =generateRandomMatrix(2000,200,1000);printMatrix(matrix);
System.out.println("===========================");printTopK(matrix,1000);}}