您的位置:首页 > 其它

名人博客阅读摘要三:外部排序

2014-07-29 08:40 232 查看

6. 外部排序

6.1 如何给10^7个数据量的磁盘文件排序

(1)位图方案。熟悉位图的朋友可能会想到用位图来表示这个文件集合。例如正如编程珠玑一书上所述,用一个20位长的字符串来表示一个所有元素都小于20的简单的非负整数集合,边框用如下字符串来表示集合{1,2,3,5,8,13}:0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 00 0 0

上述集合中各数对应的位置则置1,没有对应的数的位置则置0。

(2)多路归并外部排序方案。

1、内存排序。由于要求的可用内存为1MB,那么每次可以在内存中对250K的数据进行排序,然后将有序的数写入硬盘。那么10M的数据需要循环40次,最终产生40个有序的文件。

2、归并排序。将每个文件最开始的数读入(由于有序,所以为该文件最小数),存放在一个大小为40的first_data数组中;选择first_data数组中最小的数min_data,及其对应的文件索引index;将first_data数组中最小的数写入文件result,然后更新数组first_data(根据index读取该文件下一个数代替min_data);判断是否所有数据都读取完毕,否则返回2。

所以,本程序按顺序分两步,第一步、Memory Sort,第二步、MergeSort。程序的流程图,如下图所示。

                                               
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  外部排序
相关文章推荐