今天看了外排序,准备实现。

几年前,面试的时候被问过,没回答上来。昨天,看到又有人面试时被考倒了,所以从网上翻了资料。其实很简单,真的很简单啊。

第一步,按固定的块读取输入数据,用内排方法(随意自选)排好序,输出到磁盘文件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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值