直接上代码
package sort;
import java.util.*;
abstract class Accumulator {
public static final int MAX_NUM = 5000;
public static int size = 10;
public static List<Accumulator> dump = new ArrayList<Accumulator>();
protected String id = "error";
protected long duration = 0;
public abstract void sort(int[] arr);
public static void timedTest(Accumulator acc) {
int[] array = getRandomNumbers();
long start = System.nanoTime();
acc.sort(array);
acc.duration = System.nanoTime() - start;
System.out.print(String.format("%-13s: %13d\n", acc.id, (int) (acc.duration)));
dump.add(acc);
}
public static void report() {
Collections.sort(dump, new Comparator<Accumulator>() {
@Override
public int compare(Accumulator o1, Accumulator o2) {
return (int) (o1.duration - o2.duration);
}
});
for (Accumulator acc : dump) {
System.out.print(acc.id + " > ");
}
System.out.println();
}
public static int[] getRandomNumbers() {
Random rand = new Random(47);
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = rand.nextInt(Accumulator.MAX_NUM);
}
return arr;
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
class BubbleSort extends Accumulator {
{
id = "bubbleSort";
}
@Override
public void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
}
class SelectionSort extends Accumulator {
{
id = "selectionSort";
}
@Override
public void sort(int[] arr) {
for (int i = 0; i < arr.length; i++