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 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
private static int[] mergeSort(int[] A) { int n = A.length; if (n < 2) { return A; } int mid = n / 2; int[] left = new int[mid]; int[] right = new int[n - mid]; for (int i = 0; i < mid; i++) { left[i] = A[i]; } for (int j = mid; j < n; j++) { right[j - mid] = A[j]; } mergeSort(left); mergeSort(right); merge(left, right, A); return A; }
private static int[] merge(int[] left, int[] right, int[] A) { int leftLen = left.length, rightLen = right.length; int i = 0, j = 0, k = 0; while (i < leftLen && j < rightLen){ if (left[i] < right[j]){ A[k] = left[i]; i++; } else { A[k] = right[j]; j++; } k++; } while (i < leftLen) { A[k] = left[i]; i++; k++; } while (j < rightLen) { A[k] = right[j]; j++; k++; } return A; }
|
近期评论