算法 - 排序“n”个输入文件并生成单个输出文件的最佳方法是什么

时间:2016-02-16 16:01:30

标签: c algorithm sorting

我正在研究以下算法:

输入程序:“n”输入包含数字的文件,并假设每个输入文件都已排序。

输出到程序:单个输出文件,以排序方式包含所有元素

例如:

n = 4

file1 = [1,5,6,9]

file2 = [2,8,10,15]

file3 = [3,7,9,11]

file4 = [2,4,6,8]

输出= [1,2,2,3,4,5,6,6,7,8,8,9,9,10,11,15]

我的方法:读取每个文件的第一个元素,找到它们中的最小元素并将其写入输出文件。 然而,这是非常缓慢的,并且有一组约束条件:

内存:程序需要可扩展,文件大小可以扩展到1.4GB,因此在内存中读取整个文件并不是首选

文件数量:文件数量可能增长到很多,这进一步导致性能下降。

我使用C编程语言来做这件事,所以请相应地提出建议,我不能改变我的语言。

1 个答案:

答案 0 :(得分:1)

如果文件已经排序,请使用合并排序版本,这需要时间O(n)来合并已排序的集合。取前两个列表并合并它们并继续,直到没有文件为止。

这应该花费时间等于O(nm),其中n是文件的大小,m是文件的数量。

希望这有帮助!