栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

外排序 归并排序 超级详细 拜托点赞

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

外排序 归并排序 超级详细 拜托点赞

外排序 就是比如说你在文件中你有很大的数组 你无法一起加载到内存中 只能一部分一部分的加载带内存中,然后对它进行排序,他的思想就是 我先分为几份,然后对每一份先排序,排完序后我再进行归并排序,具体步骤程序都标注明白了 。请看程序注释就可以 拿过来直接就可以跑

另外 快速排序在这里就不给了 上一篇已经给了

void _mergefile(const char* file1, const char* file2, const char* mergefile)
{
	FILE* fout1 = fopen(file1, "r");
	if (fout1 == NULL)
	{
		printf("文件打开失败n");
		exit(-1);
	}
	FILE* fout2 = fopen(file2, "r");
	if (fout2 == NULL)
	{
		printf("文件打开失败n");
		exit(-1);
	}
	FILE* fin = fopen(mergefile, "w");
	if (fin == NULL)
	{
		printf("文件打开失败n");
		exit(-1);
	}

	//读取1 2 文件的数据 然后进行归并排序把他们放入到merfefile文件中
	int num1, num2;
	int ret1 = fscanf(fout1, "%dn", &num1);
	int ret2 = fscanf(fout2, "%dn", &num2);
	while (ret1 != EOF && ret2 != EOF)
	{
		if (num1 < num2)
		{
			fprintf(fin, "%dn", num1);
			ret1 = fscanf(fout1, "%dn", &num1);
		}
		else
		{
			fprintf(fin, "%dn", num2);
			ret2 = fscanf(fout2, "%dn", &num2);
		}
	}

	while (ret1 != EOF)
	{
		fprintf(fin, "%dn", num1);
		ret1 = fscanf(fout1, "%dn", &num1);
	}
	while (ret2 != EOF)
	{
		fprintf(fin, "%dn", num2);
		ret2 = fscanf(fout2, "%dn", &num2);
	}



	fclose(fout1);
	fclose(fout2);
	fclose(fin);


}
void mergesortfile(const char* file)
{
	FILE* fout = fopen(file, "r");
	if (file == NULL)
	{
		printf("文件打开失败n");
		exit(-1);
	}
	//打开文件后要读取里面的数据 
	int num = 0;
	int a[10];//把整个文件平分  使每一个小文件先承载10个数据
	int i = 0;
	int n = 10;
	char subfile[20];
	int filei = 1;
	while (fscanf(fout, "%dn", &num)!=EOF)
	{
		if (i < n - 1)
		{
			a[i] = num;
			i++;
		}
		else
		{
			a[i] = num;  //之前读了9个 现在再加上一个 为10个 不能在上面 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号