码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2020-04-05 00:14:45      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:code   new   ges   lse   length   turn   归并排序   大小   子集合   

归并排序

基本思想

  • 将待排序元素分成大小大致相同的 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++];
        }
    }

归并排序

标签:code   new   ges   lse   length   turn   归并排序   大小   子集合   

原文地址:https://www.cnblogs.com/hao-blogs/p/12635327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!