我正在使用读写系统调用合并k-sorted流。
在读取文件中的第一个整数并对它们进行排序后,应再次访问具有最小元素的文件。 我不知道该怎么做。我以为我可以使用像这样的结构:
struct filePointer {
int ptr;
int num;
}fptr[5];
有人可以告诉我该怎么做。
由于
答案 0 :(得分:1)
虽然逐个读取整数并不是一种有效的方法,但我会尝试编写您正在寻找的解决方案。然而,这不是一个真正的实现,只是这个想法。
你的结构应该是这样的:
struct filePointer {
FILE * fp;
int num;
} fptr[k]; /* I assume k is constant, known at compile time */
您需要有一个优先级队列(http://en.wikipedia.org/wiki/Priority_queue),并且根据num确定prioities。
首先读取所有文件中的第一个数字,然后将它们插入优先级队列(pq)。
然后当pq不为空时,弹出第一个包含最小整数的元素,与pq中的其他元素相比。
将第一个元素保存的整数写入文件。
使用文件指针(fp)尝试从输入文件中读取新的整数。
如果EOF(文件结束),则不执行任何操作
否则通过将num设置为读取来将新元素插入到pq中。
当循环结束时,关闭所有文件,你将有一个新文件,其中包含输入文件中的所有元素,它将被排序。
我希望这会有所帮助。