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

    归并排序大致上可以理解为把所有数拆分到最小单位,在每个小单位时进行排序,依次把这个小单位变大,然后再排序。一直到所有数。

    上图中SR为函数形参时传入的数组,TR为临时数组。在本代码中,num数组为传入数组,t为临时数组。left在最左边,mid为上图的m,right在最右边。

     1 #include<stdio.h>
     2 
     3 void Merge(int num[],int t[],int left,int mid,int right){
     4     
     5     int i = left;                               //i在左边 
     6     int j = mid + 1;                            //j在右边,对应上图 
     7     int k = i;
     8     
     9     for(;i<=mid && j<=right;k++){               //i、j都是有界限的,k是临时数组存入的下标 
    10         
    11         if(num[i]<num[j]){                      //找出较小的数依次存放到临时数组t中 
    12             t[k] = num[i];                      //num[i]小就把这个数存入 
    13             i++;                                //然后在左边找下一个 
    14         }
    15         else{
    16             t[k] = num[j];                      //num[j]小就把这个数存入 
    17             j++;                                //然后在右边找下一个
    18         }
    19     }
    20     
    21     int l;
    22     if(i<=mid)                                  //当j全部存入后就把剩余的i部分也全存入 
    23         for(l=0;l<=mid-i;l++)
    24             t[k+l] = num[i+l];
    25     if(j<=right)                                //当i全部存入后就把剩余的j部分也全存入
    26         for(l=0;l<=right-j;l++)
    27             t[k+l] = num[j+l];
    28     
    29 }
    30 
    31 void MSort(int num[],int t[],int left,int right) {    //t是存储排好序的数组 
    32     
    33     int t2[7];                                        //每次分半后到最小单位数存放在临时数组t2中 
    34     int m = (left+right)/2;
    35     
    36     if(left==right)
    37         t[m] = num[left];                            //如果left、riht相同,则把这个位置上的数存放到临时数组
    38     else{                                            //相同位置上 ,其实就是找到最小单位存入(拆分到1个) 
    39         MSort(num,t2,left,m);                        //如果不同,则分半递归继续寻找 
    40         MSort(num,t2,m+1,right);
    41         Merge(t2,t,left,m,right);                    //当t2存放新数之后,就开始排序 
    42     }    
    43     
    44     
    45 }
    46 
    47 void main(){
    48 
    49     int i,num[7] = {12,13,0,21,10,5,7},t[7];
    50     for(i=0;i<7;i++)
    51         printf("%d ",num[i]);
    52     
    53     printf("
    ");
    54     MSort(num,t,0,6);
    55     
    56     for(i=0;i<7;i++)
    57         printf("%d ",t[i]);
    58 
    59 
    60 }
  • 相关阅读:
    RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World(转载)
    如何安装和配置RabbitMQ(转载)
    C++学习笔记-模板
    C++学习笔记-多态的实现原理
    C++学习笔记-多态的实现原理
    C++学习笔记-多态
    C++学习笔记-多态
    C++学习笔记-继承中的构造与析构
    C++学习笔记-继承
    C++学习笔记-封装
  • 原文地址:https://www.cnblogs.com/lsy-lsy/p/11801411.html
Copyright © 2011-2022 走看看