生成大文件并,对文件内容进行排序:
适用对象:1,文件值的集合为有限个,2文件大,
思路:从最小值到最大值,分别统计各值出现的次数,并记录,从最小值开始向结果文件中写入,每个值写入的次数就是统计的次数,(注意要去掉空行)
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main()
{
FILE *fp = fopen("bigfile.dat", "w");
srand(time(NULL));//从种子中取的随机数
int i;
for (i = 0; i < 10000000; i++)
{
fprintf(fp, "%d\n", rand() % 512); //生成512以内的随机数
}
fclose(fp);
printf("create bigfile end!");
/*
对生成大文件进行排序
*/
FILE *fpr = fopen("bigfile.dat", "r");
int ar[512] = { 0 };//文件值范围数组
printf("1");
while(!feof(fpr))
{
//printf("1");
char buf[100] = { 0 };
fgets(buf, sizeof(buf), fpr);
if (buf[0] != 0) // 去掉空行
{
int index = atoi(buf);
ar[index] ++; //统计值数量
}
}
for (int i = 0; i < 512; i++)
{
printf("ar[%d] = %d\n",i, ar[i]);
}
FILE * fpw = fopen("sort_res.dat", "w");
for (int i = 0; i < 512; i++)
{
for (int j = 0; j < ar[i]; j++)
{
fprintf(fpw, "%d\n", i);
}
}
printf("end!!!");
return 0;
}