在此网页中:
http://web.eecs.utk.edu/~huangj/CS302S04/notes/external-sorting2.html
将生成的运行合并到一起 先后更大的运行,直到 文件已排序。
正如我引用的那样,我们如何将产生的运行合并在一起???我们没有那么多记忆。
答案 0 :(得分:44)
想象一下你的数字是1 - 9
9 7 2 6 3 4 8 5 1
让我们假设一次只有3个适合记忆。
所以你将它们分成3块并对每个块进行排序,将每个结果存储在一个单独的文件中:
279
346
158
现在,您将三个文件中的每个文件作为流打开,并从每个文件中读取第一个值:
2 3 1
输出最低值1
,然后从该流中获取下一个值,现在您拥有:
2 3 5
输出下一个最低值2
,然后继续,直到您输出整个排序列表。
答案 1 :(得分:1)
如果您将两次运行A
和B
处理为更大的运行C
,您可以逐行生成逐步更大的运行,但仍然只能读取最多2行一次。因为这个过程是迭代的,并且因为您正在处理数据流而不是完全削减数据,所以您不必担心内存使用情况。另一方面,磁盘访问可能会使整个过程变得缓慢 - 但它确实胜过首先无法完成工作。