package net.coderodde.stat;
import java.util.Arrays;
import java.util.Random;
public class Demo {
private static final int WARMUP_LENGTH = 100_000;
private static final int WARMUP_ITERATIONS = 500;
private static final int ARRAY_LENGTH = 50_000_000;
public static void main(String[] args) {
long seed = System.currentTimeMillis();
Random random = new Random(seed);
warmup(random);
int[] array = getRandomIntArray(ARRAY_LENGTH, random);
System.out.println("Seed = " + seed);
long startTime = System.currentTimeMillis();
int median1 = OrderStatistics.randomizedSelect(array, ARRAY_LENGTH / 2);
long endTime = System.currentTimeMillis();
System.out.println("OrderStatistics.randomizedSelect() in " +
(endTime - startTime) + " milliseconds.");
startTime = System.currentTimeMillis();
Arrays.sort(array);
int median2 = array[ARRAY_LENGTH / 2];
endTime = System.currentTimeMillis();
System.out.println("Selection via sorting in " + (endTime - startTime) +
" milliseconds.");
if (median1 != median2) {
System.err.println("Algorithms disagree: " + median1 + " vs. " +
median2);
} else {
System.out.println("Algorithms agree: " + median1);
}
}
private static void warmup(Random random) {
System.out.println("Warming up...");
for (int iteration = 0; iteration < WARMUP_ITERATIONS; ++iteration) {
int[] array = getRandomIntArray(WARMUP_LENGTH, random);
OrderStatistics.randomizedSelect(array,
random.nextInt(WARMUP_LENGTH));
Arrays.sort(array);
}
System.out.println("Warming up done!");
}
private static int[] getRandomIntArray(int length, Random random) {
int[] array = new int[length];
for (int i = 0; i < array.length; ++i) {
array[i] = random.nextInt(1_000_000);
}
return array;
}
}