如果有一个500G的超大文件,里面都是数值,如何对这些数值排序?

首先,对于这个这样一个问题,我们肯定不能直接一次性全部将数据加载到内存里面。

解决思路:

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。


你可能感兴趣的:(算法)