ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

# mergeSort 归并排序

2019-08-05 16:54:20  阅读:189  来源: 互联网

标签:mergeSort 归并 int mid array 排序


mergeSort 归并排序

1. 基本描述

​ 将两个 有序 的数列 合并成一个有序数列。归并排序的核心就是这么一句话。

​ 这里有两个重点

  1. 前提 有序数列
  2. 合并

​ 问题就在这里,一个无序的数组怎么前提是有序。

​ 一个数的数列就是有序。

这就涉及到归并排序算法细节了。

时间复杂度
$$
O(nlog_2n)
$$
​ 空间复杂度
$$
T(n)
$$

2.算法流程

  1. 从上往下分解

  2. 从下往上归并

    所以归并排序,在其名字中其实忽略了分解。那么同样采用递归实现。

    img

3. 算法实现

从上往下分解

   private static void merge(int[] array, int l, int r){
        if(l==r) {
            return ;
        }
        int mid=(l+r)/2;
        merge(array,l,mid);
        merge(array,mid+1,r);
        mergeSort(array,l,mid+1,r);
    }

​ 归并算法

  1. 扩充
  2. 拷贝
  3. 归并
  4. 处理尾部
    private static void mergeSort(int[] array, int l, int mid, int r) {
        int  [] left=new int [mid-l];
        int []right=new int [r-mid+1];
        System.arraycopy(array,l,left,0,left.length);
        System.arraycopy(array,mid,right,0,right.length);

        int i=0,j=0;
        int post=l;
        while(i<left.length&&j<right.length){
            if(left[i]<right[j])
                array[post]=left[i++];
            else
                array[post]=right[j++];
            post++;
        }

        for (;i<left.length;i++)
                array[post++]=left[i];
        for (;j<right.length;j++)
            array[post++]=right[j];
    }

标签:mergeSort,归并,int,mid,array,排序
来源: https://www.cnblogs.com/EsMussSeinHui/p/11303966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有