public class MergeSort implements IArraySort {
public int[] sort(int[] sourceArray) throws Exception {
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
int middle = (int) Math.floor(arr.length / 2);
int[] left = Arrays.copyOfRange(arr, 0, middle);
int[] right = Arrays.copyOfRange(arr, middle, arr.length);
return merge(sort(left), sort(right));
protected int[] merge(int[] left, int[] right) {
int[] result = new int[left.length + right.length];
while (left.length > 0 && right.length > 0) {
if (left[0] <= right[0]) {
left = Arrays.copyOfRange(left, 1, left.length);
right = Arrays.copyOfRange(right, 1, right.length);
while (left.length > 0) {
left = Arrays.copyOfRange(left, 1, left.length);
while (right.length > 0) {
right = Arrays.copyOfRange(right, 1, right.length);