先写 合并两个有序数组, 然后分治递归
    动画演示:
    https://visualgo.net/zh/sorting

    1. public class MergeSort {
    2. /**
    3. * 归并排序
    4. */
    5. public static int[] mergeSort(int[] array) {
    6. if (array.length < 2) {
    7. return array;
    8. }
    9. int mIndex = array.length / 2;
    10. int[] yin = mergeSort(Arrays.copyOfRange(array, 0, mIndex));
    11. int[] yang = mergeSort(Arrays.copyOfRange(array, mIndex, array.length));
    12. System.out.println("yin: " + Arrays.toString(yin) + "--- yang: " + Arrays.toString(yang));
    13. return merge(yin, yang);
    14. }
    15. /**
    16. * 合并两个有序数组
    17. * @param yin 数组1
    18. * @param yang 数组2
    19. * @return 合并后的有序数组
    20. */
    21. public static int[] merge(int[] yin, int[] yang) {
    22. int i = 0;
    23. int j = 0;
    24. int[] result = new int[yin.length + yang.length];
    25. int rIndex = 0;
    26. while (i < yin.length && j < yang.length) {
    27. if (yin[i] < yang[j]) {
    28. result[rIndex] = yin[i];
    29. i ++;
    30. } else {
    31. result[rIndex] = yang[j];
    32. j++;
    33. }
    34. rIndex++;
    35. }
    36. if (i < yin.length) {
    37. for (int k = i; k < yin.length; k++, rIndex++) {
    38. result[rIndex] = yin[k];
    39. }
    40. }
    41. if (j < yang.length) {
    42. for (int k = j; k < yang.length; k++, rIndex++) {
    43. result[rIndex] = yang[k];
    44. }
    45. }
    46. System.out.println("marge result: " + Arrays.toString(result));
    47. return result;
    48. }
    49. public static void main(String[] args) {
    50. int[] arr = {2, 33, 443, 3232, 3, 33, 12, -11};
    51. System.out.println(Arrays.toString(mergeSort(arr)));
    52. }
    53. }

    输出:

    1. yin: [2]--- yang: [33]
    2. marge result: [2, 33]
    3. yin: [443]--- yang: [3232]
    4. marge result: [443, 3232]
    5. yin: [2, 33]--- yang: [443, 3232]
    6. marge result: [2, 33, 443, 3232]
    7. yin: [3]--- yang: [33]
    8. marge result: [3, 33]
    9. yin: [12]--- yang: [-11]
    10. marge result: [-11, 12]
    11. yin: [3, 33]--- yang: [-11, 12]
    12. marge result: [-11, 3, 12, 33]
    13. yin: [2, 33, 443, 3232]--- yang: [-11, 3, 12, 33]
    14. marge result: [-11, 2, 3, 12, 33, 33, 443, 3232]