这正是起源
QuickSort
当时内存中没有足够的RAM来排序,所以它们的过程是将部分结果存储在磁盘中。
所以你可以做的是:
选择一个轴。
按顺序读取文件,并将低于透视的数据存储在temp_file_1中,将大于或等于透视的数据存储在temp_file_2中。
重复temp_file_1中的过程,并将结果附加到result_文件中。
对temp_file_2重复该过程,并将结果附加到result_文件
当零件足够小时(
就像2个直接交换
足以在内存中进行排序)
这样,您就可以成批地进行排序,并将部分结果存储在临时文件中,最后一个文件将对结果进行排序。
编辑
我告诉过你一个快速排序是可能的。
毕竟,您需要一些额外的空间来存放临时文件。
我就是这么做的。
我创建了一个40MB的文件,文件中的数字用逗号分隔。
我给它命名
input
:
输入为40MB
排序过程中,将创建具有“大于”、“小于”值存储桶的tmp文件,排序完成后,这些值将被发送到一个名为(猜测是什么)的文件中。
output
使用部分结果创建临时文件
最后,删除所有tmp文件,结果保存在“输出”文件中,并按正确的编号顺序排序:
最后创建文件“output”,注意它也是40MB
这是完整的程序。
import java.io.*;
import java.util.*;
public class FileQuickSort {
static final int MAX_SIZE = 1024*1024*16; // 16 megabytes in this sample, the mor