import java.lang.System; import java.util.Arrays; public class Sort { public int[] sort(int[] m) { if (m.length <= 1) return m; int middle = m.length / 2; int[] left = Arrays.copyOf(m,middle); int[] right = Arrays.copyOfRange(m,middle,m.length); right = sort(right); left = sort(left); int[] result = merge(left, right); return result; } public int[] merge(int[] left, int[] right) { int[] result = new int[left.length + right.length]; int indexLeft = 0; int indexRigth = 0; boolean noEnd = true; while (noEnd) { if (left[indexLeft] <= right[indexRigth]) { result[indexLeft + indexRigth] = left[indexLeft]; indexLeft++; if (indexLeft == left.length) { for (int i = indexRigth; i < right.length; i++) result[indexLeft + i] = right[i]; noEnd = false; } } else { result[indexLeft + indexRigth] = right[indexRigth]; indexRigth++; if (indexRigth == right.length) { for (int i = indexLeft; i < left.length; i++) result[i + indexRigth] = left[i]; noEnd = false; } } } return result; } }