Khu*_*tel 3 c c++ sorting file-io
我需要使用仅100mb的内存尽快对包含数字列表的10gb文件进行排序.我把它们分成几块然后合并它们.
我目前正在使用C文件指针,因为它们比c ++文件i/o(至少在我的系统上)更快.
我尝试了1gb文件并且我的代码工作正常,但是在打开10gb文件后,只要我fscanf就会引发分段错误.
FILE *fin;
FILE *fout;
fin = fopen( filename, "r" );
while( 1 ) {
// throws the error here
for( i = 0; i < MAX && ( fscanf( fin, "%d", &temp ) != EOF ); i++ ) {
v[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
我应该用什么呢?
对于如何以最佳方式解决这个问题,您有什么建议吗?
这种称为外部排序的算法有一类.合并排序的变体是外部排序算法(只是google用于合并排序磁带).
但是如果你在Unix上,在单独的进程中运行sort命令可能更容易.
BTW.打开大于2 GB的文件需要大量文件支持.根据您的操作系统和库,您需要定义宏或调用其他文件处理函数.