外部排序

时间:2011-02-24 04:08:10

标签: algorithm sorting

在此网页中:

http://web.eecs.utk.edu/~huangj/CS302S04/notes/external-sorting2.html

  

将生成的运行合并到一起   先后更大的运行,直到   文件已排序。

正如我引用的那样,我们如何将产生的运行合并在一起???我们没有那么多记忆。

2 个答案:

答案 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)

如果您将两次运行AB处理为更大的运行C,您可以逐行生成逐步更大的运行,但仍然只能读取最多2行一次。因为这个过程是迭代的,并且因为您正在处理数据流而不是完全削减数据,所以您不必担心内存使用情况。另一方面,磁盘访问可能会使整个过程变得缓慢 - 但它确实胜过首先无法完成工作。