一尘不染

外部合并排序算法如何工作?

algorithm

我试图了解外部合并排序算法的工作原理(我看到了相同问题的一些答案,但没有找到我所需要的)。我正在读杰弗里·麦康奈尔(Jeffrey
McConnell)的《算法分析》一书,并试图实现此处描述的算法。

例如,我有输入数据:3,5,1,2,4,6,9,8,7,并且我只能将4个数字加载到内存中。

我的第一步是按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操作呢?


阅读 301

收藏
2020-07-28

共1个答案

一尘不染

我想经过这么长时间,您一定已经得到了答案。但我仍在提供一些示例链接,以帮助遇到此问题的其他人。

注:寻找到这个环节之前,您应该有关于一个想法 数据结构来看看
双向排序的实例
多路外部排序的例子
,你会得到一个外部排序算法的实现的一个完整的想法

2020-07-28