1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public static void mergeSort(int[] a) { mergeSort(a, 0, a.length - 1); }
private static void mergeSort(int[] a, int left, int right) { if (left >= right) { return; } int center = (left + right) / 2; mergeSort(a, left, center); mergeSort(a, center + 1, right); merge(a, left, center, right); }
private static void merge(int[] a, int left, int center, int right) { int[] tmp = new int[right - left + 1];
int i = left; int j = center + 1; int k = 0;
while (i <= center && j <= right) tmp[k++] = a[i] < a[j] ? a[i++] : a[j++];
while (i <= center) tmp[k++] = a[i++];
while (j <= right) tmp[k++] = a[j++];
System.arraycopy(tmp, 0, a, left, tmp.length); }
|