外部排序常采用的排序方法也是归并排序
外存中4500个记录,内存只能容纳750个记录,6次读取分别进行内部排序,排序好的分别为Segment_1…
内存空间划分为三份,每份大小250个记录,Segment_1读取250个记录放入一份,Segment_2读取250个记录放入一份,最后一份为输出缓冲区,开始归并,输出缓冲区满后写到磁盘,某个输入空了,继续读取250个记录,直到完成Segment_1和Segment_2的归并记为Segment_12,同样完成其他Segment的归并,最后Segment_12和Segment_34进行归并,以此类推,最后完成4500个记录的排序。
1 大量数据查找最大的5个数
建大小为5的小顶堆(以初始5个数),遍历其余数据,比堆顶大可替换堆顶并堆调整
在此之前先去重(先分治,每个hash后的小文件做去重,hashMap记录数据的出现次数,keySet获取数据)
2 大量数据查找出现频率最高的5个数
分治(按数据对小文件数量取模,放入到多个小文件中),每个小文件统计频率前5(hashMap),所有的小文件前5进行归并
分治的核心:保证相同数据一定在同一个小文件内