zoukankan      html  css  js  c++  java
  • 【Sort】Merge Sort归并排序

      归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序。

      算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组

    1         msort(nums,tmp,lp,center);
    2         msort(nums,tmp,center+1,rp);
    3         merge(nums,tmp,lp,center+1,rp);

    下面是代码,主要包括三个函数:

     1 void mergesort(int *nums,int n)
     2 {
     3     int *tmp=new int[n];
     4     if(tmp)
     5     {
     6         msort(nums,tmp,0,n-1);
     7         delete[]tmp;
     8     }
     9 }
    10 void msort(int *nums,int*tmp,int lp,int rp)
    11 {
    12     int center=(lp+rp)/2;
    13     if(lp<rp)
    14     {
    15         msort(nums,tmp,lp,center);
    16         msort(nums,tmp,center+1,rp);
    17         merge(nums,tmp,lp,center+1,rp);
    18     }
    19 }
    20 void merge(int *nums,int *tmp,int lp,int rp,int over)
    21 {
    22     int i=lp,j=rp,p=lp;
    23     while(i<rp&&j<=over)
    24     {
    25         if(nums[i]<nums[j])
    26             tmp[p++]=nums[i++];
    27         else
    28             tmp[p++]=nums[j++];
    29     }
    30     while(i<=rp-1)
    31         tmp[p++]=nums[i++];
    32     while(j<=over)
    33         tmp[p++]=nums[j++];
    34     while(lp<=over)
    35     {
    36         nums[lp]=tmp[lp];
    37         lp++;
    38     }
    39 }
  • 相关阅读:
    find
    Spring 中——————ClassPathResource初学
    Cookie 、Session、Token的学习
    JAVA注解之实现原理
    JAVA注解---2
    JAVA注解————1
    函数式遍程----Function
    java 反射的学习实践2
    Spring AOP 之动态代理源码分析
    正则表达式之Pattern.MULTILINE Pattern.DOTALL
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6172276.html
Copyright © 2011-2022 走看看