首先,对于这个这样一个问题,我们肯定不能直接一次性全部将数据加载到内存里面。
解决思路:
1.先将这个文件里面的值拆分成多个文件,每个文件大小差不多512M。
2.在这1000个小文件里面的值进行排序去重
分两种情况:
① 如果里面的数值不是很大,这样拼接1000文件数值,拼接,去重,排序。对于8G的内存计算机应该是可以处理的。
② 文件里面的数值就是坑爹的大。
3.对于②处理也很简单,对于1000小文件,比如就按升序排序,我们不是已经拿到了每个的 排序么。我们把1000个文件里面最小的值(也就是第一个)拿出来,并把他们从这些文件中删除,拿这些最小值去重排序作为第一个文件,
4.重复上面的步骤,这样我们也得到1000个 这样排好序的文件。
举例
如果有个文件(-1,5,2,1,4,3,2,4,5)
第一步:截取,每3个一个文件得到(-1,5,2),(1,4,3),(2,4,5)
第二步:去重排序(-1,2,5),(1,3,4),(2,4,5)
第三步:拿第一个去重排序得到新的3个小文件(-1,1,2),(2,3,4),(4,5)
看到了吧!按从小到大的顺序就出来了,我们最后都知道(-1,5,2,1,4,3,2,4,5)文件从小到大的顺序是-1,1,2,3,4,5。