package com.jadekler.sarah; import java.util.Arrays; public class MergeSort implements Sort { public int[] sort(int[] arr) { if (arr.length == 1) { return arr; } else { int[] left = sort(Arrays.copyOfRange(arr, 0, arr.length / 2)); int[] right = sort(Arrays.copyOfRange(arr, arr.length / 2, arr.length)); return merge(left, right); } } private int[] merge(int[] left, int[] right) { int[] merged = new int[left.length + right.length]; int leftIndex = 0; int rightIndex = 0; int mergedIndex = 0; while (mergedIndex < left.length + right.length) { if (rightIndex == right.length || (leftIndex < left.length && left[leftIndex] < right[rightIndex])) { merged[mergedIndex] = left[leftIndex]; leftIndex++; } else { merged[mergedIndex] = right[rightIndex]; rightIndex++; } mergedIndex++; } return merged; } }