我试图了解外部合并排序算法的工作原理(我看到了相同问题的一些答案,但没有找到我所需要的)。我正在读杰弗里·麦康奈尔(Jeffrey McConnell)的《算法分析》一书,并试图实现此处描述的算法。
例如,我有输入数据:3,5,1,2,4,6,9,8,7,并且我只能将4个数字加载到内存中。
3,5,1,2,4,6,9,8,7
我的第一步是按4位数读取输入文件,将其在内存中排序,然后将其写入文件A,然后写入文件B。
我有:
A:[1,2,3,5][7] B:[4,6,8,9]
现在我的问题是,如果这些文件不适合内存,如何将这些文件中的块合并到较大的文件中?杰弗里·麦康奈尔(Jeffrey McConnell)写道,我需要读取一半的块并将其合并到下一个文件C和D中。
但是我弄错了顺序:
C:[1,2,4,6,3,8,5,9] D:[7]
任何人都可以提供带有逐步说明的示例吗?
PS:我了解如何通过从文件中读取来按数字合并数字,但是如何使用内存缓冲区来减少I / O操作呢?
我想经过这么长时间,您一定已经得到了答案。但我仍在提供一些示例链接,以帮助遇到此问题的其他人。
注:寻找到这个环节之前,您应该有关于一个想法 堆 数据结构来看看 双向排序的实例 和多路外部排序的例子,你会得到一个外部排序算法的实现的一个完整的想法