【发布时间】:2018-04-06 13:29:51
【问题描述】:
我被要求对两个文件(记录文件)应用双向合并排序, 该算法解释了如下步骤:
排序阶段 1)要排序的文件上的记录被分成几组。 每个组称为一次运行,每次运行都适合主内存。 2) 每次运行都会应用内部排序,3) 排序后的运行结果会分布到两个外部文件中。
合并排序: 1) 在排序阶段创建的每个外部文件的一次运行合并成更大的排序记录运行。 2)结果存储在第三个文件中。 3)数据被分配回前两个文件中,并继续合并,直到所有记录都在一个大运行中。
我只能申请Sort Phase,所以当前文件是:
(假设运行仅包含 3 个键)
文件 1: 50 95 110 | 40 120 153 | 22 80 140
文件 2: 10 36 100 | 60 70 130
这是合并阶段的步骤 所以如果我在理论上解决它会执行以下操作:
合并阶段:
第一步:
文件 3: 10 36 50 95 100 110 | 40 60 70 120 130 153 | 22 80 140
文件 1: 10 36 50 95 100 100 | 22 80 140
文件 2: 40 60 70 120 130 153
第二步:
文件 3: 10 36 40 50 60 70 95 100 110 120 130 135 | 22 80 140
文件 1: 10 36 40 50 60 70 95 100 110 120 130 135
文件 2: 22 80 140
第 3 步:
文件 3: 10 22 36 40 50 60 70 80 95 100 110 120 130 135 140
一次运行停止排序完成
现在我需要应用合并阶段,以便每个文件中的每个键相互比较并将较小的输出到文件 3,然后在步骤 2 中将文件 3 重新分配到两个文件中,然后合并和排序直到运行一个排序
我如何在 c++ 中应用这种算法,我有点困惑如何确定每一步中每次运行的大小。
【问题讨论】:
-
你期望“文件 3”的内容是什么?
-
我用照片更新了帖子。
-
我想我不明白排序标准。
-
取决于块的大小
-
请编辑您的问题,将算法和步骤都包含为文本,而不是图像链接。这将使您的帖子更加清晰。
标签: c++ sorting merge mergesort