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

     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 }
  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2364035.html
Copyright © 2011-2022 走看看