归并排序

Posted hao-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。

归并排序

基本思想

  • 将待排序元素分成大小大致相同的 2 个子集合;
  • 分别对 2 个子集合进行排序;
  • 最终将排好序的子集合合并成为所要求的排好序的集合。

最常使用的归并排序方法是2-路归并排序。

复杂度和稳定性

时间复杂度:O(nlog2n)

空间复杂度:O(n)

稳定性:稳定

代码

static void mergeSort(int[] nums){
        int[] tmp = new int[nums.length];
        mergeSort(nums, tmp, 0, nums.length - 1);
    }

    static void mergeSort(int[] nums, int[] tmp, int left, int right){
        if (left >= right)
            return;
        int mid = (left + right) / 2;
        mergeSort(nums, tmp, left, mid);
        mergeSort(nums, tmp, mid + 1, right);
        merge(nums, tmp, left, mid, right);
    }

    static void merge(int[] nums, int[] tmp, int left, int mid, int right){
        for (int i = left; i <= right; i++){
            tmp[i] = nums[i];
        }
        int i = left;
        int j = mid + 1;
        int k = left;
        while (i <= mid && j <= right){
            if (tmp[i] <= tmp[j]){
                nums[k++] = tmp[i++];
            }else{
                nums[k++] = tmp[j++];
            }
        }
        while (i <= mid){
            nums[k++] = tmp[i++];
        }
        while (j <= right){
            nums[k++] = tmp[j++];
        }
    }

以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序