⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11_2.c

📁 C语言常用算法源代码,非常好用非常好用
💻 C
字号:
/* ======================================== */
/*    程式实例: 11_2.c                      */
/*    合并排序                              */
/* ======================================== */
#include <stdio.h>
#define LEN  4                    /* 最大元素个数         */

/* ---------------------------------------- */
/*  合并排序                                */
/* ---------------------------------------- */
void merge(FILE *merge,FILE *sort1,FILE *sort2,int len)
{
   int s1,s2;                     /* 资料计数             */
   char c,c1,c2;

   c1 = getc(sort1);              /* 读取第一个档案       */
   c2 = getc(sort2);              /* 读取第二个档案       */
   s1 = s2 = 0;                   /* 设定计数初值         */
   while ( 1 )
   {
      if ( c1 < c2 )              /* 比较两个值           */
      {
         /* 第一个档案小, 存入主档 */
         putc(c1,merge);
         s1++;                    /* 计数加一             */
         if ( s1 < len )          /* 是否未读完           */
            c1 = getc(sort1);     /* 读取第一个档案       */
         else
            break;                /* 跳出回路             */
      }
      else
      {
         /* 第二个档案小, 存入主档 */
         putc(c2,merge);
         s2++;                    /* 计数加一             */
         if ( s2 < len )          /* 是否未读完           */
            c2 = getc(sort2);     /* 读取第一个档案       */
         else
            break;                /* 跳出回路             */
      }
   }
   /* 第一个档案是否是最後一笔 */
   if ( s1 < len )                /* 处理最後一笔         */
   {
      putc(c1,merge);             /* 存入主档             */
      s1++;                       /* 计数加一             */
   }
   /* 第二个档案是否是最後一笔 */
   if ( s2 < len )                /* 处理最後一笔         */
   {
      putc(c2,merge);             /* 存入主档             */
      s2++;                       /* 计数加一             */
   }
   /* 第一个档案 */
   while ( s1 < len )             /* 取出剩下的资料       */
   {
      c = getc(sort1);            /* 读取第一个档案       */
      putc(c,merge);              /* 存入主档             */
      s1++;                       /* 计数加一             */
   }
   /* 第二个档案 */
   while ( s2 < len )             /* 取出剩下的资料       */
   {
      c = getc(sort2);            /* 读取第二个档案       */
      putc(c,merge);              /* 存入主档             */
      s2++;                       /* 计数加一             */
   }
}

/* ---------------------------------------- */
/*  主程式: 读取两个档案内容, 接着用合并排  */
/*  序法来排序.                             */
/* ---------------------------------------- */
void main()
{
   FILE *fp;                      /* 主档指标             */
   FILE *fp1;                     /* 第一资料档案指标     */
   FILE *fp2;                     /* 第二资料档案指标     */

   fp = fopen("result.txt","r+"); /* 开启主档             */
   if ( fp == NULL )
      printf("主档开启错误! \n");
   else
      fp1 = fopen("sort1.txt","r+");  /* 开启第一资料档案 */
      if ( fp1 == NULL )
         printf("第一资料档开启错误! \n");
      else
      {
         fp2 = fopen("sort2.txt","r+"); /*开启第二资料档案*/
         if ( fp2 == NULL )
            printf("第二资料档开启错误! \n");
         else
         {
            printf("正在处理数据,请稍等. . . \n");
            merge(fp,fp1,fp2,LEN);      /* 合并排序法     */
            printf("数据处理完成! \n");
            fclose(fp);           /* 关档                 */
            fclose(fp1);
            fclose(fp2);
         }
      }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -