几年前,面试的时候被问过,没回答上来。昨天,看到又有人面试时被考倒了,所以从网上翻了资料。其实很简单,真的很简单啊。
第一步,按固定的块读取输入数据,用内排方法(随意自选)排好序,输出到磁盘文件F1, F2,...
第二步,对第一步的结果进行归并,形成输出结果F12, F34,F56.....
第三步,继续归并,形成磁盘文件F1234, F5678.....
知道形成最后的结果文件。
归并算法:
File.open('block1') do |f1|
File.open('block2') do |f2|
f1.each_line.zip(f2.each_line).each do |data1, data2|
if data1 <= data2
write(data1) to file
else
write(data2) to file
end
end
end
end