import java.util.Comparator;
public class AnimationTester {
public static void main(String[] args) {
Integer[] values = new Integer[]{1,2,7,3,5};
Comparator<Integer> comp = new Comparator<Integer>() {
public int compare(Integer d1, Integer d2) {
return d1.compareTo(d2);
}
};
MergeSorter.sort(values, comp);
for (int i = 0; i < values.length; i++){
System.out.print(values[i]+" ");
}
}
}
class MergeSorter {
public static <E> void sort(E[] a, Comparator<? super E> comp) {
mergeSort(a, 0, a.length - 1, comp);
}
private static <E> void mergeSort(E[] a, int from, int to, Comparator<? super E> comp) {
if (from == to)
return;
int mid = (from + to) / 2;
// Sort the first and the second half
mergeSort(a, from, mid, comp);
mergeSort(a, mid + 1, to, comp);
merge(a, from, mid, to, comp);
}
private static <E> void merge(E[] a, int from, int mid, int to, Comparator<? super E> comp) {
int n = to - from + 1;
Object[] values = new Object[n];
int fromValue = from;
int middleValue = mid + 1;
int index = 0;
while (fromValue <= mid && middleValue <= to) {
if (comp.compare(a[fromValue], a[middleValue]) < 0) {
values[index] = a[fromValue];
fromValue++;
} else {
values[index] = a[middleValue];
middleValue++;
}
index++;
}
while (fromValue <= mid) {
values[index] = a[fromValue];
fromValue++;
index++;
}
while (middleValue <= to) {
values[index] = a[middleValue];
middleValue++;
index++;
}
for (index = 0; index < n; index++)
a[from + index] = (E) values[index];
}
}