假设我们必须对一个1GB的随机整数文件进行排序,可用的RAM大小为200 Mb,将如何完成?
最简单的方法是使用外部排序。
我们将源文件分为大小等于RAM大小的临时文件,然后首先对这些文件进行排序。
假设1GB = 1024MB,那么我们按照以下步骤操作。
- 将源文件分为5个小临时文件,每个文件的大小为200MB(即等于ram的大小)。
- 分别使用ram依次对这些临时文件进行排序(任何排序算法:快速排序,合并排序)。
现在我们有一些临时文件,如下图所示。
现在,我们对临时文件进行了排序。
- 指针在每个文件中初始化
- 创建一个大小为1GB(源文件大小)的新文件。
- 将每个文件中的第一个元素与指针进行比较。
- 最小的元素将被复制到新的1GB文件中,并且指向该最小元素的文件中的指针将递增。
- 遵循相同的过程,直到所有指针都遍历了各自的文件。
- 遍历所有指针后,我们将得到一个包含1GB排序整数的新文件。
当主内存(RAM)的大小受到限制时,这是可以对任何较大的文件进行排序的方式。
基本思想是将较大的文件分为较小的临时文件,对临时文件进行排序,然后使用这些临时文件创建新文件。在Infosys采访中询问了此问题,以了解电源程序员的个人资料。