CH8_9.C
上传用户:lgb298
上传日期:2013-03-22
资源大小:1025k
文件大小:1k
源码类别:

软件工程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #define M 15
  3. typedef struct
  4. {  int key;
  5.   /* float info;*/
  6. }JD;
  7. void merge(JD r[],int h,int m,int w,JD t[])
  8. {  int i,j,k;
  9.    i=h; j=m+1; k=h-1;
  10.    while((i<=m)&&(j<=w))
  11.    {  k++;
  12.       if(r[i].key<=r[j].key)
  13.          t[k]=r[i++];
  14.       else
  15.          t[k]=r[j++];
  16.    }
  17.    if(i>m)
  18.       while(j<=w)  t[++k]=r[j++];
  19.    else
  20.       while(i<=m)  t[++k]=r[i++];
  21. }
  22. void tgb(int s,int n,JD r[],JD t[])
  23. {  int i=1;
  24.    while(i<=(n-2*s+1))
  25.    {  merge(r,i,i+s-1,i+2*s-1,t);
  26.       i=i+2*s;
  27.    }
  28.    if(i<(n-s+1))  merge(r,i,i+s-1,n,t);
  29.    else
  30.       while(i<=n)  t[i]=r[i++];
  31. }
  32. void mergesort(JD r[],int n)
  33. {  int i,s=1;
  34.    JD t[M];
  35.    while(s<n)
  36.    {  tgb(s,n,r,t);
  37.       s*=2;
  38.       if(s<n) { tgb(s,n,t,r); s*=2; }
  39.       else  {  i=1;
  40.        while(i<=n)  r[i]=t[i++];
  41.     }
  42.    }
  43. }
  44. void main()
  45. {
  46.     static JD r[]={0,49,38,65,97,76,13,27};
  47.     int i,n=7;
  48.     mergesort(r,n);
  49.     for(i=1;i<=n;i++)
  50.       printf("%d  ",r[i].key);
  51.     printf("n");
  52. }