听起来你只需要合并文件中的数字,而不是对它们进行排序,因为它们已经在每个文件中排序.合并排序的merge部分是这样的:
function merge(left,right)
var list result
while length(left) > 0 or length(right) > 0
if length(left) > 0 and length(right) > 0
if first(left) ? first(right)
append first(left) to result
left = rest(left)
else
append first(right) to result
right = rest(right)
else if length(left) > 0
append left to result
break
else if length(right) > 0
append right to result
break
end while
return result
Run Code Online (Sandbox Code Playgroud)
现在,您可以从两个缓冲区中的两个文件中读取前50 MB的数字,应用合并算法,然后当其中一个缓冲区已用尽(分析了所有数据)时,从所需文件中读取另外50 MB.没有必要对任何东西进行排序.
您只需要一个条件来检查其中一个缓冲区是否为空.如果是,请从与缓冲区关联的文件中读取更多内容.