package array.sorting; import java.util.Arrays; public class MergeSort { static int[] mergeSort(int[] array){ if (array.length == 1) { return array; } int mid = array.length / 2; int[] left = mergeSort(Arrays.copyOfRange(array, 0, mid)); int[] right = mergeSort(Arrays.copyOfRange(array, mid, array.length)); return merge(left, right ); } static int[] merge(int[] first, int[] second) { int[] mix = new int[first.length + second.length]; int i = 0; int j = 0; int k = 0; while (i < first.length && j < second.length) { if (first[i] < second[j]) { mix[k] = first[i]; i++; } else { mix[k] = second[j]; } k++; } // it may be possible that array is not complites then copy yht remaining array while (i < first.length) { mix[k] = first[i]; i++; k++; } while (j < second.length) { mix[k] = second[j]; j++; k++; } return mix; } }