多路归并排序

雪压枝头低,虽低不着泥

 

今天准备放假,无聊看到一个场景题,问题如下:

     有一个文件里面存储着很多很多很多的无序的数,然后要求进行一个排序,内存限定,磁盘足够

然后捣鼓了一下,学到了一种新技能 - 多路归并排序

 

学习的过程是这样的:

第一步 :  把存储着很多很多很多数的文件进行切割,切割成N个小文件,每个小文件都存储一些无序的数,具体切割的每个文件的大小不要超过机器的内存,如下图:

 

第二步: 文件切割后标记每个文件唯一的标识,暂且标识为 文件1、文件2 .... 文件n; 然后对每个文件里面的数据进行内存排序,并把文件里最小的数记录到内存中,如下图;

 

第三步:磁盘创建一个新的文件,对内存里面的数字进行排序,将最小的数字追加到文件中,并记录最小的数字对应的文件,如这一轮中最小的数字是7,将7追加新文件,然后再从7对应的有序的文件n中取下一个数到内存结构的排序数组中,然后又再将最小的数字追加到新文件中.... 如此的反复,这样就可以保证内存只有一个数组在排序,相当于一个中转站,从磁盘取数排序,然后再将数追加到磁盘中

 

 

最后,附上一个整体的数据流向图

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值