import java.util.*; class TimingMergeSort { public static void swap(int[] data, int x, int y) { int temp = data[x]; data[x] = data[y]; data[y] = temp; } public static void merge(int[] data, int left, int mid, int right) { int[] A; A = new int[mid-left+2]; int[] B; B = new int[right-mid+1]; int i; // Copy the first half into A for(i = left; i <= mid; i++) A[i-left] = data[i]; // Place infinity in the last slot of A A[A.length-1] = Integer.MAX_VALUE; // Copy the second half into B for(i = mid+1; i <= right; i++) B[i-(mid+1)] = data[i]; // Place infinity in the last slot of B B[B.length-1] = Integer.MAX_VALUE; i = 0; // index for A int j = 0; // index for B int l; // A and B are merged back into data for(l = left; l <= right; l++) { if(A[i] <= B[j]) { data[l] = A[i]; i++; } else { data[l] = B[j]; j++; } } } public static void recursiveMergeSort(int[] data, int left, int right) { if (left < right) { int mid = (left + right)/2; recursiveMergeSort(data, left, mid); recursiveMergeSort(data, mid+1, right); merge(data, left, mid, right); } } public static void mergeSort(int[] data, int n) { recursiveMergeSort(data, 0, n-1); } public static void main(String[] args) { long time, newTime, sum; System.out.print("{"); for(int n = 1000; n <= 20000; n=n+1000) { sum = 0; for (int j = 0; j < 100; j++) { // Generate a random integer array of size n int[] data; data = new int[n]; // Random is a java class defined in java.util // To learn more about this class see // http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html Random rand; rand = new Random(); for(int i = 0; i < n; i++) data[i] = rand.nextInt(); // Initialize time to the value before calling // bubbleSort and newTime to the value after time = System.currentTimeMillis(); mergeSort(data, n); newTime = System.currentTimeMillis(); sum = sum + (newTime-time); } if(n < 20000) System.out.print(sum*1.0/100+", "); else System.out.println(sum*1.0/100+"}"); } } }