public static int[] mergeSort(int a[], int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
mergeSort(a, low, mid);
mergeSort(a, mid + 1, high);
merge(a, low, mid, high);
}
return a;
}
public static void merge(int a[], int low, int mid, int high) {
int[] tem = new int[high - low + 1];
int k = 0;
int i = low, j = mid + 1;
while (i <= mid && j <= high) {
if (a[i] < a[j]) {
tem[k++] = a[i++];
} else {
tem[k++] = a[j++];
}
}
while (i <= mid) {
tem[k++] = a[i++];
}
while (j <= high) {
tem[k++] = a[j++];
}
for (int l = 0; l < tem.length; l++) {
a[low + l] = tem[l];
}
}