【C语言】文件数据排序(冒泡与插入版排序)

5 篇文章 0 订阅
3 篇文章 0 订阅

【C语言】文件数据排序—适合文件操作初学者
Ubuntu18.04 GCC环境编译成功(非标题党)


执行流程:

1.随机种子生成一个.txt文件存放至源文件目录
2.对其进行读取排序生成新文件
3.冒泡排序与插入版排序(非插入排序)

全程生成3个文件:

1.随机数排序用.txt
2.随机数排序冒泡版.txt
3.随机数排序插入版.txt

不说多余的,直接上代码,不懂就琢磨注释:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000

//创建随机数文件
void creatFile()
{
	//添加随机数种子
	srand((size_t)time(NULL));	

	//随机数文件指针
	FILE *fp = fopen("./随机数排序用.txt","w");	

	if (!fp)
	{
		printf("File Creat Fail!\n");
		return;
	}

	//循环控制计数
	int i = MAX;	

	while(i)
	{
		//随机250以内数据
		fprintf(fp, "%d\n", rand()% 250);		
		i--;
	}

	fclose(fp);	
}

//冒泡排序
void bubbleSort()
{
	//文件指针
	FILE *fp1 = fopen("./随机数排序用.txt","r");	
	FILE *fp2 = fopen("./随机数排序冒泡版.txt","w");

	//判空
	if (!fp1 || !fp2)
	{
		printf("File Sort Fail!\n");
		return;
	}

	//承载数组
	int arr[MAX] = {0};

	//数组写入文件数值
	for (int i = 0; i < MAX; i++)
		fscanf(fp1, "%d\n", &(arr[i]));

	//冒泡
	for (int i = 0; i < MAX - 1; i++)
	{
		for (int j = 0; j < MAX - 1 - i; j++)
		{
			if(arr[j] > arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}

	//排序结果写入文件中
	for (int i = 0; i < MAX; i++)
	{
		fprintf(fp2, "%d\n", arr[i]);
	}

	fclose(fp1);
	fclose(fp2);
}


//插入版排序
void insertSort()
{
	FILE *fp1 = fopen("./随机数排序用.txt","r");
	FILE *fp2 = fopen("./随机数排序插入版.txt","w");

	if (!fp1 || !fp2)
	{
		printf("File Sort Fail!\n");
		return;
	}

	//承载数组
	int arr[MAX] = {0};
	int dest[250] = {0};

	//文件数值提取到arr数组中,arr[i]值作为位置加入到对应下标位置的dest数组中
	for (int i = 0; i < MAX; i++)
	{
		fscanf(fp1, "%d\n", &(arr[i]));
		dest[arr[i]]++;
	}

	//排序结果写入文件中(外层循环dest[]数组长度,内层循环dest[i]次)
	for (int i = 0; i < 250; i++)
	{
		for (int j = 0; j < dest[i]; j++)
		{
			fprintf(fp2, "%d\n", i);
		}
	}

	fclose(fp1);
	fclose(fp2);
}



int main(void)
{
	creatFile();

	bubbleSort();

	insertSort();

	return 0;
}

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我姥爷是校长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值