怎样实现归并排序算法

例题:假设有一个整数数组nums,请问如何对它进行归并排序?

分析:我们可以使用归并排序算法来解决这个问题。归并排序是一种分治算法,它的基本思想是将待排序的数组分成两个部分,分别对它们进行归并排序,然后将它们合并起来。具体实现时,我们可以使用递归的方式来分别对左右两个部分进行排序。

Java代码实现:

public static void mergeSort(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return;
    }
    int mid = nums.length / 2;
    int[] left = Arrays.copyOfRange(nums, 0, mid);
    int[] right = Arrays.copyOfRange(nums, mid, nums.length);
    mergeSort(left);
    mergeSort(right);
    merge(nums, left, right);
}

private static void merge(int[] nums, int[] left, int[] right) {
    int i = 0, j = 0, k = 0;
    while (i < left.length && j < right.length) {
        if (left[i] < right[j]) {
            nums[k++] = left[i++];
        } else {
            nums[k++] = right[j++];
        }
    }
    while (i < left.length) {
        nums[k++] = left[i++];
    }
    while (j < right.length) {
        nums[k++] = right[j++];
    }
}