Q9.4外排序

外排序


外排序是一种处理海量数据的排序手段,在不爆内存的前提下完成大量数据的排序处理。以下面CTCI的一道题为例:

题目:如果你有个2GB的文件,其中每一行是一个字符串,你会使用哪种算法来排序,为什么?


解答:显然不可能一次性将该文件读入内存,然后来个qsort, heap_sort。于是想到利用硬盘(外存储)。


1. 读100M from 2GB,写到某个临时文件,如1.dat。循环此步,直到将2GB文件拆分成1.dat、2.dat、``` 21.dat;

2. 拿100M内存来实施这个归并排序。将这100M的内存拆分 (21 + 1) 份,其中“21”对应为输入缓冲区,

   "1"对应输出缓冲区;

3. 21个输入缓冲区各自插个管子到21个dat,1个输出缓冲区插个管子到写出文件(sorted);

4. 分别从1.dat~21.dat 读入数据将 21 个输入缓冲区填满,阔以联想开闸放水。对这21个输入缓冲区的数据多路             归并,结果放入输出缓冲区;

5. 哪路输入缓冲区空了就再从对应.dat文件读满,输出缓冲区满了就写出结果文件;

6. .dat文件读空了就拔掉管子,21个.dat文件都拔掉管子后,将输出缓冲区里的数据全部写出(如果有);

7. 完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值