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

📄 main.cpp

📁 使用置换选择排序和多路归并实现的外排序程序
💻 CPP
字号:
#include<stdio.h>
#include "replaceSelection.h"
#include"LoserTree.h"
void loserTreeMultiMerge(int outfilenum,char *outfile){

	Buffer *bufferPool=new Buffer[outfilenum+1];	//开辟长度为outfilenum+1的缓冲池,bufferPool[0]用作输出buffer,其余的作输入buffer
	node *racer=new node[outfilenum+1];	//选手
	char fname [20];	//输入文件名数组
	FILE ** f =new FILE*[outfilenum+1];	//输入输出文件的句柄数组. 
	//输出文件句柄存放在为f[0], 输入文件句柄存放在f[1]到outfilenum]
	if(outfilenum>1){
		LoserTree lt(outfilenum);	//败方树
		//初始化输出文件
		f[0] = fopen(outfile,"w+");
		//初始化输入缓冲区buffer[1..outfilenum]
		for(int i = 1; i <= outfilenum; i++){
			//初始化存放顺串的文件名,从1.txt到outfilenum.txt
			_itoa(i, fname, 10);
			strcat(fname, ".txt");
			//初始化文件句柄数组
			//句柄数组序号和文件名序号相对应,也和缓冲区号相对应
			f[i] = fopen(fname, "r");
			//往输入缓冲区置入数据
			for(int j = 0; j < MAX_BUFFER; j++ ){
				node read;	//读出的数据置放在里面
				if(!feof(f[i])){
					fscanf(f[i], "%d %s", &read.key,read.infor);
					bufferPool[i].insert(read);
				}
				else
					break;
			}//for

		}//for
		//初始化选手
		for(int k = 1; k <= outfilenum; k++){
			bufferPool[k].read(racer[k]);
		}
		//***调用多路归并算法,进行outfilenum路归并***//
		multiMerge(lt, racer, bufferPool, f,outfilenum);
		for(int n = 0; n <= outfilenum; n++){	         //关闭文件句柄
			fclose(f[n]);
		} 
		for(int i = 1; i <= outfilenum; i++){             //删除生成的文件
			char cmd[30]="del ",name[20];
			_itoa(i, name, 10);
			strcat(name, ".txt");
			strcat(cmd,name);
			system(cmd);
		}
	}
	else{
		char cmd[30]="copy 1.txt ";
		strcat(cmd,outfile);
		system(cmd);
		system("del 1.txt");
	}
	delete [] bufferPool;
	delete [] racer;
	delete [] f;
	printf("%s\n","归并完成");
}

int  replaceSelectionMain(FILE * in){
	node A[MAX];
	Buffer input;
	Buffer output;
	//调用置换选择算法	
	int outputfilenum=replacementSelection(A, MAX, in, input, output);
	printf("%s\n","选择排序完成");
	return outputfilenum;
}

void main(){

	//打开输入,输出文件;
	FILE *fin,*fout;
	printf("%s\n","请键入输入文件名");
	char infile[20];
	scanf("%s",infile);
	printf("%s\n","请键入输出文件名");
	char outfile[20];
	scanf("%s",outfile);
	fin=fopen(infile,"r");
	fout=fopen(outfile,"w+");
	if(fin==NULL||fout==NULL){
		printf("%s\n","open file error!");
		return ;
	}
	fclose(fout);
	int outputfilenum=replaceSelectionMain(fin);
	loserTreeMultiMerge(outputfilenum,outfile);
	fclose(fin);
	
}

⌨️ 快捷键说明

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