我必须将多个排序文件合并为一个排序文件。
目前,我正在读取每个文件(12字节)的一个数据条目,将最大值写入输出文件,并递增从其中复制数据的输入文件的指针,非常类似于合并排序的合并步骤。
工业工程
while (n){
//read one data element (12 bytes)
//find maximum
//write the maximum
//increment file pointer containing of file containng maximum
}
此过程正在重复n=约3000000次。问题是这需要很长时间(大约30秒)。我想把拍摄时间减少到10秒以下。有什么办法吗?
最佳答案
不应该一次从文件中读取12字节。从每个文件中读取4k左右的缓冲区,并使用缓冲区进行排序,必要时刷新缓冲区。也可以用4k左右的块来写输出
如果文件大小足够小,请将整个文件加载到内存中,排序,然后写入输出。