67.假设1亿的11位的手机号,运行空间128M,如果要进行排序,那么要怎么设计: 本问题中,可以借鉴归并排序的思路,将大文件拆成100个小文件,小文件内部排好序,然后进行100路的归并操作。 步骤 将 1. G的大文件,经过一遍按行读写的方式(迭代器模式)进行处理,拆成 100 100 100个小文件,每个小文件中存放100万个手机号。 分别将100个小文件读进内存,将手机号从小到大排序,排序结果写回对应的小文件中。 通过一个小顶堆形式的优先级队列(PriorityQueue)进行归并操作。堆中的元素是一个二元组:(手机号, 该手机号对应的小文件编号)。 一开始,将每个文件的第一个手机号读出来放到小顶堆中。由于这 100 100 100个手机号分别是各个子文件中最小的,因此,此时小顶堆堆顶的手机号就是全局最小的手机号。因此可以将堆顶元素弹出,写到最终的输出文件mobiles_sorted.txt中。 每次从堆顶弹出一个元素后,如果该元素所对应的小文件还没被处理完,就从相应小文件中读入下一个手机号,补充到堆中。 所有手机号都各自加入和弹出小顶堆一次后,排序完成,此时的mobiles_sorted.txt文件就是最终结果
点赞 评论

相关推荐

被普调的六边形战士很高大:项目经历貌似和专业或者求职方向没大关系?
点赞 评论 收藏
分享
牛客网
牛客企业服务