如何对一个超大文件进行排序,内存不够
我们这里使用三步骤:分割(首先将大文件分割成内存够的小文件)、排序(对每个小文件进行排序,我这里是写入的时候就排好序了)、合并(利用多路归并+败者树实现)
1.分割+排序
*
* 将大文件分割成小文件
* 排序好之后写入小文件
*
* */
public class Test2Main {
public static void main(String[] args) {
long start = System.currentTimeMillis();
StringBuilder builder = new StringBuilder(1024 * 1024 * 8);
int a = 0;
//这里每个文件存多少数据根据自己实际情况而定,我这里的数据是1024*1024*128,我一共分为了16个小文件.
int[] arr = new int[1024 * 1024 * 8];
try {
BufferedReader br = new BufferedReader
(new FileReader("syudy\\src\\L2_end\\file2\\jm.txt"));
String len;
int i = 0;
while ((len=br.readLine())!=null){
//每次只存你定好的数据量进数组
arr[a++] = Integer.parseInt(len);
//由于我把文件分为十六个,所以if语句中只进去十六次,刚好由i来生成十六个小文件
if (a == 1024 * 1024 * 8) {
//调用快速排序的方法对每个小文件排序
int[] k = KuaiSu.kuaisu(arr, 0, arr.length - 1);
i++;
for (int i1 = 0; i1 |