好吧,在任何文件中都有更小/更大的元素没有问题。下面是外部排序过程的例子:
你的初始数据:
data = [2, 5, 3, 7, 1, 6, 4, 8, 9]
考虑你只有3个单位的内存,你有以下的碎片,和排序的结果:
d1 = [2, 5, 3] -> sorting -> d1 = [2, 3, 5]
d2 = [7, 1, 6] -> sorting -> d2 = [1, 6, 7]
d3 = [4, 8, 9] -> sorting -> d3 = [4, 8, 9]
当你有三个可用的单位,您可以在同一时间三个碎片阅读,所以,你必须:
d = [], d1 = [2, 3, 5], d2 = [1, 6, 7], d3 = [4, 8, 9] -> min(d1, d2, d3) = 1
d = [1], d1 = [2, 3, 5], d2 = [6, 7], d3 = [4, 8, 9] -> min(d1, d2, d3) = 2
d = [1, 2], d1 = [3, 5], d2 = [6, 7], d3 = [4, 8, 9] -> min(d1, d2, d3) = 3
d = [1, 2, 3], d1 = [5], d2 = [6, 7], d3 = [4, 8, 9] -> min(d1, d2, d3) = 4
d = [1, 2, 3, 4], d1 = [5], d2 = [6, 7], d3 = [8, 9] -> min(d1, d2, d3) = 5
d = [1, 2, 3, 4, 5], d1 = [], d2 = [6, 7], d3 = [8, 9] -> min(d1, d2, d3) = 6
d = [1, 2, 3, 4, 5, 6], d1 = [], d2 = [7], d3 = [8, 9] -> min(d1, d2, d3) = 7
d = [1, 2, 3, 4, 5, 6, 7], d1 = [], d2 = [], d3 = [8, 9] -> min(d1, d2, d3) = 8
d = [1, 2, 3, 4, 5, 6, 7, 8], d1 = [], d2 = [], d3 = [9] -> min(d1, d2, d3) = 9
d = [1, 2, 3, 4, 5, 6, 7, 8, 9], d1 = [], d2 = [], d3 = [] -> []
您可能会关注的是,当您有足够的限制以允许您不从每个文件中读取至少一个元素,或者即使决定只是从给定文件中读取更多元素,将另一个文件留下读。
这与上面的过程相同,唯一不同的是,在读取两个文件并合并它们之间的数据之后,您必须从第三个文件和文件生成,这是文件1的合并和2
由于两个第三个文件,最后生成的文件是肯定排序,你可以依次扫描从两个文件中的数据,合并项目成独特的结果。
感谢您的详细回答,现在我明白了内存中会发生什么。 – TheSoulkiller