11_2.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:4k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 11_2.c                      */
  3. /*    合并排序                              */
  4. /* ======================================== */
  5. #include <stdio.h>
  6. #define LEN  4                    /* 最大元素个数         */
  7. /* ---------------------------------------- */
  8. /*  合并排序                                */
  9. /* ---------------------------------------- */
  10. void merge(FILE *merge,FILE *sort1,FILE *sort2,int len)
  11. {
  12.    int s1,s2;                     /* 资料计数             */
  13.    char c,c1,c2;
  14.    c1 = getc(sort1);              /* 读取第一个档案       */
  15.    c2 = getc(sort2);              /* 读取第二个档案       */
  16.    s1 = s2 = 0;                   /* 设定计数初值         */
  17.    while ( 1 )
  18.    {
  19.       if ( c1 < c2 )              /* 比较两个值           */
  20.       {
  21.          /* 第一个档案小, 存入主档 */
  22.          putc(c1,merge);
  23.          s1++;                    /* 计数加一             */
  24.          if ( s1 < len )          /* 是否未读完           */
  25.             c1 = getc(sort1);     /* 读取第一个档案       */
  26.          else
  27.             break;                /* 跳出回路             */
  28.       }
  29.       else
  30.       {
  31.          /* 第二个档案小, 存入主档 */
  32.          putc(c2,merge);
  33.          s2++;                    /* 计数加一             */
  34.          if ( s2 < len )          /* 是否未读完           */
  35.             c2 = getc(sort2);     /* 读取第一个档案       */
  36.          else
  37.             break;                /* 跳出回路             */
  38.       }
  39.    }
  40.    /* 第一个档案是否是最後一笔 */
  41.    if ( s1 < len )                /* 处理最後一笔         */
  42.    {
  43.       putc(c1,merge);             /* 存入主档             */
  44.       s1++;                       /* 计数加一             */
  45.    }
  46.    /* 第二个档案是否是最後一笔 */
  47.    if ( s2 < len )                /* 处理最後一笔         */
  48.    {
  49.       putc(c2,merge);             /* 存入主档             */
  50.       s2++;                       /* 计数加一             */
  51.    }
  52.    /* 第一个档案 */
  53.    while ( s1 < len )             /* 取出剩下的资料       */
  54.    {
  55.       c = getc(sort1);            /* 读取第一个档案       */
  56.       putc(c,merge);              /* 存入主档             */
  57.       s1++;                       /* 计数加一             */
  58.    }
  59.    /* 第二个档案 */
  60.    while ( s2 < len )             /* 取出剩下的资料       */
  61.    {
  62.       c = getc(sort2);            /* 读取第二个档案       */
  63.       putc(c,merge);              /* 存入主档             */
  64.       s2++;                       /* 计数加一             */
  65.    }
  66. }
  67. /* ---------------------------------------- */
  68. /*  主程式: 读取两个档案内容, 接着用合并排  */
  69. /*  序法来排序.                             */
  70. /* ---------------------------------------- */
  71. void main()
  72. {
  73.    FILE *fp;                      /* 主档指标             */
  74.    FILE *fp1;                     /* 第一资料档案指标     */
  75.    FILE *fp2;                     /* 第二资料档案指标     */
  76.    fp = fopen("result.txt","r+"); /* 开启主档             */
  77.    if ( fp == NULL )
  78.       printf("主档开启错误! n");
  79.    else
  80.       fp1 = fopen("sort1.txt","r+");  /* 开启第一资料档案 */
  81.       if ( fp1 == NULL )
  82.          printf("第一资料档开启错误! n");
  83.       else
  84.       {
  85.          fp2 = fopen("sort2.txt","r+"); /*开启第二资料档案*/
  86.          if ( fp2 == NULL )
  87.             printf("第二资料档开启错误! n");
  88.          else
  89.          {
  90.             printf("正在处理数据,请稍等. . . n");
  91.             merge(fp,fp1,fp2,LEN);      /* 合并排序法     */
  92.             printf("数据处理完成! n");
  93.             fclose(fp);           /* 关档                 */
  94.             fclose(fp1);
  95.             fclose(fp2);
  96.          }
  97.       }
  98. }