大文件排序(栈中)

来源:互联网 发布:最可靠的单片机 编辑:程序博客网 时间:2024/05/01 23:53
生成大文件并,对文件内容进行排序:

适用对象: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;}


原创粉丝点击