package com.shekhargulati.tadm.ch04.examples;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
System.out.println(Arrays.toString(mergeSort(new int[]{3, 2, 1, 4})));
}
public static int[] mergeSort(int[] arr) {
if (arr.length == 1) {
return arr;
}
int middle = arr.length / 2;
int[] left = mergeSort(Arrays.copyOfRange(arr, 0, middle));
int[] right = mergeSort(Arrays.copyOfRange(arr, middle, arr.length));
return merge(left, right, arr.length);
}
private static int[] merge(int[] left, int[] right, int length) {
int[] sorted = new int[length];
int[] smaller = ((left.length < right.length) ? left : right);
for (int i = 0; i < smaller.length; i++) {
if (left[i] <= right[i]) {
sorted[i] = left[i];
} else {
sorted[i] = right[i];
}
}
int[] greater = ((left.length > right.length) ? left : right);
for (int i = smaller.length; i < greater.length; i++) {
sorted[i] = greater[i];
}
return sorted;
}
}