package test; import java.util.Random; public class TSort { public static void main(String[] args) { TSort tsort = new TSort(); tsort.test(); } public void test() { TopHundredHeap.test(null); } public void testt(String a, double[] d, String[] t, String... c) { Math.random(); } } class TopHundredHeap { public static void test(String[] args) { // the size of the array int number = 100000000; // the top k values int k = 100; // the range of the values in the array int range = 1000000001; // input for minHeap based method int[] array = new int[number]; Random random = new Random(); for (int i = 0; i < number; i++) { array[i] = random.nextInt(range); } TopHundredHeap thh = new TopHundredHeap(); long t1, t2; // start time t1 = System.currentTimeMillis(); int[] top = thh.topHundred(array, k); // end time t2 = System.currentTimeMillis(); System.out.println("The total execution time of " + "quicksort based method is " + (t2 - t1) + " millisecond!"); // print out the top k largest values in the top array System.out.println("The top " + k + "largest values are:"); for (int i = 0; i < k; i++) { System.out.println(top[i]); } } public int[] topHundred(int[] array, int k) { // the heap with size k int[] top = new int[k]; for (int i = 0; i < k; i++) { top[i] = array[i]; } buildMinHeap(top); for (int i = k; i < array.length; i++) { if (top[0] < array[i]) { top[0] = array[i]; minHeapify(top, 0, top.length); } } return top; } // create a min heap public void buildMinHeap(int[] array) { int heapSize = array.length; for (int i = array.length / 2 - 1; i >= 0; i--) { minHeapify(array, i, heapSize); } } /// MinHeapify is to build the min heap from the 'position' public void minHeapify(int[] array, int position, int heapSize) { int left = left(position); int right = right(position); int maxPosition = position; if (left < heapSize && array[left] < array[position]) { maxPosition = left; } if (right < heapSize && array[right] < array[maxPosition]) { maxPosition = right; } if (position != maxPosition) { swap(array, position, maxPosition); minHeapify(array, maxPosition, heapSize); } } public void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } /// return the left child position public int left(int i) { return 2 * i + 1; } /// return the right child position public int right(int i) { return 2 * i + 2; } }