• 分治法之合并排序(Merge Sort)


    结构上递归的算法一般采用分治法(分解,递归解决,合并)

    分治排序第一步——“分”,第二部——“合”,时间复杂度为O(N logN),因为分治后的高度为logN,每次比较都要进行N次。但是它需要和数组一样规模的额外空间,而非原地排序。

    1 void mergeSort(int A[],int tmp[],int begin,int end){
    2     if((end-begin)>0){
    3         int mid=begin+(end-begin)/2;
    4         mergeSort(A,tmp,begin,mid);
    5         mergeSort(A,tmp,mid+1,end);
    6         merge(A,tmp,begin,mid+1,end);
    7     }
    8 }

    mergeSort函数的作用就是将序列分解至长度为1,再执行merge函数,合并已排序序列:

    left(i)                                       right (j)            

                       end

     1 void merge(int A[],int tmp[],int left,int right,int end){
     2     int i=left;int j=right;
     3     int m=left;
     4     while(i<right&&j<=end){
     5         if(A[i]<A[j]){
     6             tmp[left++]=A[i];
     7             i++;
     8         }
     9         if(A[i]>=A[j]){
    10             tmp[left++]=A[j];
    11             j++;
    12         }
    13             
    14     }
    15     if(i==right){
    16         while(j<=end){
    17             tmp[left++]=A[j++];
    18         }
    19     }
    20     if(j>end){
    21         while(i<right){
    22             tmp[left++]=A[i++];
    23         }
    24     }
    25     for(;m<=end;m++){
    26         A[m]=tmp[m];
    27     }
    28 }
  • 相关阅读:
    BAT脚本批量调用Sql执行文件 (SqlServer 数据库)
    树莓派系统刻录到首次登陆等问题
    数据库视图的使用
    MQ配置安装
    PLSQL集合类型
    PLSQL-包函数存储过程
    Oracle 字段拆分替换在合并成一条
    ORACLE-EXP和IMP方法介绍
    javascript几个月前的时间
    返回顶部实现方式
  • 原文地址:https://www.cnblogs.com/scar-xd/p/3348284.html
Copyright © 2020-2023  润新知