【数据结构_C语言】归并排序—文件类型

news2024/11/25 19:17:14

文章目录

  • 1.排序定义
  • 2. 代码实现

1.排序定义

内排序:数据量相对少一些,可以放到内存中排序。
外排序:数据量较大,内存中放不下,数据放到磁盘文件中,需要排序。
归并排序:
在这里插入图片描述
在这里插入图片描述

2. 代码实现

void _MergeFile(const char* file1, const char* file2, const char* mfile)
{
	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(mfile, "w");
	if (fin == NULL)
	{
		printf("打开文件失败\n");
		exit(-1);
	}

	int num1, num2;
	int ret1 = fscanf(fout1, "%d\n", &num1);
	int ret2 = fscanf(fout2, "%d\n", &num2);
	while (ret1 != EOF && ret2 != EOF)
	{
		if (num1 < num2)
		{
			fprintf(fin, "%d\n", num1);
			ret1 = fscanf(fout1, "%d\n", &num1);
		}
		else
		{
			fprintf(fin, "%d\n", num2);
			ret2 = fscanf(fout2, "%d\n", &num2);
		}
	}

	while (ret1 != EOF)
	{
		fprintf(fin, "%d\n", num1);
		ret1 = fscanf(fout1, "%d\n", &num1);
	}

	while (ret2 != EOF)
	{
		fprintf(fin, "%d\n", num2);
		ret2 = fscanf(fout2, "%d\n", &num2);
	}

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

void MergeSortFile(const char* file)
{
	FILE* fout = fopen(file, "r");
	if (fout == NULL)
	{
		printf("打开文件失败\n");
		exit(-1);
	}

	// 分割成一段一段数据,内存排序后写到,小文件,
	int n = 10;
	int a[10];
	int i = 0;
	int num = 0;
	char subfile[20];
	int filei = 1;

	memset(a, 0, sizeof(int)*n);
	while (fscanf(fout,"%d\n", &num) != EOF)
	{
		if (i < n-1)
		{
			a[i++] = num;
		}
		else
		{
			a[i] = num;
			QuickSort(a, 0, n - 1);
			sprintf(subfile, "%d", filei++);
			FILE* fin = fopen(subfile, "w");
			if (fin == NULL)
			{
				printf("打开文件失败\n");
				exit(-1);
			}
			for (int i = 0; i < n; i++)
			{
				fprintf(fin,"%d\n", a[i]);
			}
			fclose(fin);

			i = 0;
			memset(a, 0, sizeof(int)*n);
		}
	}

	// 利用互相归并到文件,实现整体有序
	char mfile[100] = "12";
	char file1[100] = "1";
	char file2[100] = "2";
	for (int i = 2; i <= n; ++i)
	{
		// 读取file1和file2,进行归并出mfile
		_MergeFile(file1, file2, mfile);

		strcpy(file1, mfile);
		sprintf(file2, "%d", i+1);
		sprintf(mfile, "%s%d", mfile, i+1);
	}

	fclose(fout);
}

int main()
{
	MergeSortFile("Sort.txt");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于CNN-BiLSTM的数据回归预测

代码原理 基于CNN-BiLSTM的数据回归预测是一种结合卷积神经网络&#xff08;CNN&#xff09;和双向长短期记忆网络&#xff08;BiLSTM&#xff09;的混合模型&#xff0c;用于处理和预测时间序列数据。以下是该方法的简单原理及流程&#xff1a; 原理 &#xff08;1&#xf…

OSGB整体或自定义区域转换为3DTiles

工具 OSGB源数据灵易智模倾斜摄影编辑平台(下称OPEditor) 操作步骤 打开倾斜摄影 打开软件&#xff08;登录即注册&#xff0c;直接用手机号登录&#xff09;使用OPEditor打开OSGB原始倾斜数据&#xff0c;将会看到如下页面 整体导出为3DTiles 在右侧节点树上鼠标右键点…

“为你写诗”,与ai“推敲”码字:第一次在严谨的csdn发布只有“思绪”没有代码的笔记(ai对话实录)

与ai“推敲”码字&#xff0c;第一次在严谨的csdn发布只有“思绪”没有代码的笔记(ai对话实录)。 (笔记模板由python脚本于2024年07月22日 21:13:08创建&#xff0c;本篇笔记适合本文无关代码&#xff0c;爱思考穷探究的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&…

力扣21-30题(数学的简单的结束和数组的前几道)

20240721 1.题和解析693. 交替位二进制数405. 数字转换为十六进制数171 excel 表序列号 从这之后的是数组了2011. 执行操作后的变量值1929. 数组串联1720. 解码异或后的数组异或解析&#xff1a;2574. 左右元素和的差值101. 对称二叉树LCP 06. 拿硬币1365. 有多少小于当前数字的…

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…

three.js NDC空间转视图空间(getViewPosition)

three.js NDC空间转视图空间 NDC空间转视图空间, 比较常用。很多效果依赖于此。 包括: GTAOShaderReflectorForSSRPassSSRShader 下面看一下它的庐山真面目。 1、计算clipW 视图空间(view) 应用投影矩阵后转换到 剪裁空间(clip)。 [ A 0 B 0 0 C D 0 0 0 E F 0 0 − 1 0 ]…

Truenas scale 配置 Official Zerotier 并设置一直固定Zerotier IP

Zerotier 安装 TrueNAS Scale -> Apps -> Discover Apps -> 搜索 Zerotier 并安装Netwoek 中填入你 zerotier 网页中的的 Network IDAuto Token (API key) zerotier网页的 Account -> API Access Tokens -> New Tokenidentity.secret 和 identity.public 通过 …

国际化技术参考

一、概述 国际化就是用户可以选择对应的语言,页面展示成对应的语言; 一个系统的国际化按照信息的所在位置,可以分为三种国际化信息: 前端页面信息后端提示信息数据库的字典类信息二、前端页面国际化 使用i18n库实现国际化 i18n国际化库思路:通过jquery或者dom操作拿到需…

【动态规划】打家劫舍

动态规划的四个解题步骤&#xff1a; 1、定义子问题 2、写出子问题的递推关系 3、确定dp数组的计算顺序 4、空间优化&#xff08;可选&#xff09;上一篇博客学的有点杂乱&#xff0c;这一篇从解题步骤方面整理一下动态规划这一章。 打家劫舍&#xff08;难度&#xff1a;中等…

C++进阶中继承的全部主要内容

小编在学习完C中继承的内容之后&#xff0c;觉得继承的内容很重要&#xff0c;所以今天给大家带来的内容就是继承的主要内容&#xff0c;今天的内容包括继承的定义与语法&#xff0c;继承方式与权限&#xff0c;基类和派生类的类型转换赋值&#xff0c;继承中的隐藏&#xff0c…

数据跨境法案:美国篇下

数据跨境法案美国篇下主要介绍2018年《出口管制改革法案》(ECRA)、2018 年《外国投资风险审查现代化法案》(FIRRMA) 和《强化海外关键出口国家框架法》&#xff08;ENFORCE&#xff09;。其中 ECRA法案和 FIRRM 法案作为2019财年约翰S麦凯恩国家国防授权法&#xff08;NDAA&…

MySQL定时备份数据,并上传到oss

1.环境准备 1.安装阿里云的ossutil 2.安装mysql 2.编写脚本 脚本内容如下 #!/bin/bash # 数据库的配置信息&#xff0c;根据自己的情况进行填写 db_hostlocalhost db_usernameroot db_passwordroot db_namedb_root # oss 存贮数据的bucket地址 bucket_namerbsy-backup-buck…

开源发票识别InvoiceNet项目Windows部署踩坑记(1)

今天安装在github上的InvoiceNet开源项目&#xff0c;准备对它进行测试&#xff0c;安装过程出现了一些问题&#xff0c;做个记录&#xff0c;给遇到兄弟爬坑。 第一个问题&#xff0c;conda的问题&#xff0c; 这是另外一个包管理器&#xff0c;不仅仅可以管理python的虚拟…

如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件

什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间&#xff0c;是Ascensio System SIA公司出品的&#xff0c;基于Web的&#xff0c;开源的&#xff0c;跨平台的&#xff0c;在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套&#xff1a;文档编辑器、幻灯片编辑…

XXE:XML外部实体引入

XXE漏洞 如果服务器没有对客户端的xml数据进行限制&#xff0c;且版本较低的情况下&#xff0c;就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件&#xff0c;其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害&#xff1a;任意文件读…

【C语言】 约瑟夫环,循环链表实现

1、循环链表实现约瑟夫环&#xff0c;每次经过特定步数删除一个元素 //looplist.h #ifndef LOOPLIST_H #define LOOPLIST_H #include<stdio.h> #include<string.h> #include<stdlib.h>typedef int datatype;typedef struct Node {union {int len;datatype d…

大模型应用—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

花几千上万学习Java,真没必要!(二十二)

1、final关键字&#xff1a; 测试代码1&#xff1a; package finaltest.com;public class FinalBasicDemo {public static void main(String[] args) {// final修饰基本数据类型变量final int number 5;// 尝试修改number的值&#xff0c;这将导致编译错误// number 10; // …

JAVA在线文档

1.存在码 JDK21中文API 2.全栈行动派 JDK17中文API 3.mklab.cn JDK11中文API JDK8中文API JDK7-21英文API 4.docs.oracle.com JDK7-22英文文档

Python实现文本转换为语音

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…