public class MergeSort {
public static void mergeSort(int[] array) { int[] tmpArray = new int[array.length]; sort(array, tmpArray, 0, array.length - 1); }
private static void sort(int[] array, int[] tmp, int startIndex, int endIndex) { if (endIndex <= startIndex) { return; }
int middleIndex = startIndex + (endIndex - startIndex) / 2;
sort(array, tmp, startIndex, middleIndex); sort(array, tmp, middleIndex + 1, endIndex);
merge(array, tmp, startIndex, middleIndex, endIndex);
}
private static void merge(int[] array, int[] tmp, int startIndex, int middleIndex, int endIndex) { for (int s = startIndex; s <= endIndex; s++) { tmp[s] = array[s]; }
int left = startIndex; int right = middleIndex + 1;
while (left <= middleIndex && right <= endIndex) { if (tmp[left] < tmp[right]) { array[startIndex++] = tmp[left++]; } else { array[startIndex++] = tmp[right++]; } }
while (left <= middleIndex) { array[startIndex++] = tmp[left++]; }
while (right <= endIndex) { array[startIndex++] = tmp[right++]; }
}
}
|