import static java.lang.System.nanoTime;
import java.math.BigInteger;
import java.util.Arrays;
public class SortBenchmark {
private static void printTime(long t1, long t2) {System.out.println("Time: " + (t2 - t1) + " ns / " + ((double) (t2 - t1) / 1000000) + " ms / " + ((double) (t2 - t1) / 1000000000) + " s");}
public static void main(String[] args) {
String usage = "Usage: java SortBenchmark <length> <maximum>\nlength is the length of the integer array to sort and maximum is the maximum (exclusive, i.e. [0, maximum)) integer in the array.";
if (args.length != 2) {
System.out.println(usage);
return;
}
if (!((args[0] + args[1]).matches("[0-9]*"))) {
System.out.println("length and maximum must be positive integers in interval [1, 2^31 - 1]. Enter java Benchmark for help.");
return;
}
if ((Integer.valueOf(args[0]) == 0) || (Integer.valueOf(args[1]) == 0)) {
System.out.println("length and maximum must be positive integers in interval [1, 2^31 - 1]. Enter java Benchmark for help.");
return;
}
BigInteger _maximumInteger = new BigInteger(String.valueOf(Integer.MAX_VALUE));
BigInteger _length = new BigInteger(args[0]);
BigInteger _maximum = new BigInteger(args[1]);
if ((_length.compareTo(_maximumInteger) > 0) || (_maximum.compareTo(_maximumInteger) > 0)) {
System.out.println("length and maximum must be positive integers in interval [1, 2^31 - 1]. Enter java Benchmark for help.");
return;
}
int[] array = Sort.randomIntArray(Integer.valueOf(args[0]), Integer.valueOf(args[1]));
System.out.println("Original array:\n" + Arrays.toString(array) + "\n");
long t1, t2;
t1 = nanoTime();
System.out.println("Bubble sort:");
Sort.bubbleSort(array);
t2 = nanoTime();
printTime(t1, t2);
System.out.println();
System.out.println("Insertion sort:");
t1 = nanoTime();
Sort.insertionSort(array);
t2 = nanoTime();
printTime(t1, t2);
System.out.println();
System.out.println("Selection sort:");
t1 = nanoTime();
Sort.selectionSort(array);
t2 = nanoTime();
printTime(t1, t2);
System.out.println();
System.out.println("Radix sort:");
t1 = nanoTime();
System.out.println(Arrays.toString(Sort.radixSort(array)));
t2 = nanoTime();
printTime(t1, t2);
}
}