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

📄 algo10-3.cpp

📁 数据结构相关代码
💻 CPP
字号:
 // algo10-3.cpp 调用bo10-1.cpp的程序(运行algo10-2.cpp后运行此程序)
 #include"c1.h"
 typedef int KeyType; // 定义关键字的类型为整型
 typedef int InfoType; // 定义其他数据项的类型为整型
 #include"c9-1.h" // 记录的数据类型
 #define k 5 // k(5)路归并,以下2行取1行。第6行
 //#define k 3 // 3路归并。第7行
 FILE *fp[k+1]; // k+1个文件指针(fp[k]为大文件指针),全局变量
 typedef int LoserTree[k];
 // [1..k-1]是败者树的非叶子结点,[0]中是胜者,存相应叶子的序号
 RedType b[k+1]; // [0..k-1]是败者树的叶子(外结点),[k]存最小关键字
 #define MIN_KEY INT_MIN // 最小关键字
 #define MAX_KEY INT_MAX // 最大关键字
 #define M 10 // 设输出M个排序后的数据换行

 void Print(RedType t)
 { printf("(%d,%d)",t.key,t.otherinfo);
 }

 #include"bo10-1.cpp" // k路平衡归并的函数

 void main()
 {
   LoserTree ls; // 败者树,长度为k的整型数组
   int i;
   char outfile[10],filename[3]; // 大文件名,有序小文件名
   for(i=0;i<k;i++)
   { itoa(i,filename,10); // i作为临时的有序小文件的文件名
     fp[i]=fopen(filename,"r"); // 以读的方式打开已排序的小文件0,1,…,k-1
   }
   printf("请输入排序后的大文件名:");
   scanf("%s",outfile); // 输入排序后的大文件名给outfile
   fp[k]=fopen(outfile,"w"); // 以写的方式打开排序后的大文件outfile
   printf("有序大文件%s的记录为:\n",outfile);
   K_Merge(ls); // 利用败者树将k个有序小文件中的记录归并为1个有序大文件
   printf("\n"); // 换行
   for(i=0;i<=k;i++)
     fclose(fp[i]); // 关闭文件0,1,…,已排序的大文件outfile
 }

⌨️ 快捷键说明

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