zoukankan      html  css  js  c++  java
  • # mergeSort 归并排序

    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];
        }
    
  • 相关阅读:
    java基础(7)
    log4j日志打印级别动态调整
    前端学习
    windows下 使用vs command tools 和mingw 分别编译 openssl
    收尾作业(3)
    收尾作业(2)
    收尾作业(1)
    收尾作业第一个接口
    图形建模需求
    收尾作业2
  • 原文地址:https://www.cnblogs.com/EsMussSeinHui/p/11303966.html
Copyright © 2011-2022 走看看