【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;
}