public class Main {
public static void merge(int[] a, int l1, int r1, int l2, int r2) {
int[] tp = new int[r2 - l1 + 1];
int i = 0;
int tpl1 = l1, tpl2 = l2;
while (tpl1 <= r1 && tpl2 <= r2) {
if (a[tpl1] <= a[tpl2]) {
tp[i++] = a[tpl1++];
} else {
tp[i++] = a[tpl2++];
}
}
while (tpl1 <= r1) {
tp[i++] = a[tpl1++];
}
while (tpl2 <= r2) {
tp[i++] = a[tpl2++];
}
for (i = 0; i < tp.length; i++) {
a[l1 + i] = tp[i];
}
}
public static void mergesort(int[] a, int l, int r) {
if (l >= r) {
return;
}
int mid = (l + r) / 2;
mergesort(a, l, mid);
mergesort(a, mid + 1, r);
merge(a, l, mid, mid + 1, r);
}
public static void main(String[] args) {
int[] a = { 100, 325, 3, 134, 6, 311, 6, 3463, 4631, 6, 45, 745, 7, 3542, 43, 1, 134, 33, 2 };
for (int i : a) {
System.out.print(i + " ");
}
System.out.println();
mergesort(a, 0, a.length - 1);
for (int i : a) {
System.out.print(i + " ");
}
System.out.println();
}
}