• 归并排序


     1 void hebing(int a[],int l,int mid,int h)  
    2 {
    3 int i,x[100];
    4 int j,y[100]; //将要合并的两部分存放在两个数组中
    5 int n1 = mid-l+1;//因为下面定义的时候是i = 1,j = 1;
    6 int n2 = h-mid;
    7 for( i=1;i<=n1;i++)
    8 {
    9 x[i] = a[l+i-1];//a是从1开始的,且此处包含了mid
    10 }
    11 for( i=1;i<=n2 ;i++)
    12 {
    13 y[i] = a[mid+i];
    14 }
    15 i= 1,j = 1;
    16 int k=l;//a是从0开始的X!!!如果a是从一开始的那么调用的时候填1和n就可以
    17 while(i<=n1 && j<=n2) //此时进行归并
    18 {
    19 if(x[i]<y[j])
    20 a[k++] = x[i++];
    21 else
    22 a[k++] = y[j++];
    23 }
    24 while(i<=n1)
    25 a[k++] = x[i++];
    26 while(j<=n2)
    27 a[k++] = y[j++];
    28
    29 }
    30 void chaifen(int a[],int l,int h) //此处的递归是通过调用自己本身实现的,注意递归的含义不只是需要靠返回值实现,只要一层层调用函数运行函数即可
    31 {
    32 int mid;
    33 if(l<h)
    34 {
    35 mid = (l+h)/2;
    36 chaifen(a,l,mid);//必须 有一个包含mid
    37 chaifen(a,mid+1,h);
    38 hebing(a,l,mid,h); //他的排序是在合并的时候通过递归一层层的派的
    39 }
    40 }
    41 void main()
    42 {
    43 int n,a[100],i;
    44 scanf("%d",&n);
    45 for(i = 0;i < n;i++)
    46 {
    47 scanf("%d",&a[i]);
    48 }
    49 printf("yes\n");
    50 chaifen(a,0,n-1);
    51
    52 for(i=0;i<n;i++)
    53 {
    54 printf("%d ",a[i]);
    55 }
    56 }
  • 相关阅读:
    分析问题的方法
    听听冯洛伊曼的概念机器的齿轮声
    Nginx支持WebSocket配置
    原型模式
    redis日志位置
    修改centos7远程端口和nginx安全设置
    Java输出小端二进制文件
    centos7安装Java8
    Nginx教程
    centos7.6安装postgresql10
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2364035.html
Copyright © 2020-2023  润新知