普通人合并排序指南
它是什么?
合并排序是用于对一组项进行排序的许多方法之一。如果您有大量项目,例如联合国组织卡片,如果将它们全部放在手中并使用冒泡排序(即有多少人会自然地对卡片或其他物品进行分类)。
它还经常用于对中的大型列表进行排序计算机科学,因为它在将大集合分解为更小、更易于管理的排序任务时非常有利。
合并:基本任务
合并排序的基本思想是,您可以获取两组已排序的项,并通过一系列简单的比较快速合并它们。下面是合并工作原理的示例:
X(X)X X X第1步:X X XX X X XX X X XX X X X X X X X机组1机组2组合机组
正如你所见,第1步由两组已经分类的木棍组成。我们的目标是将两者合并为一个排序集。
X(X)X X X第二步:X X XX X X XX X X X XX X X X X X X X机组1机组2组合机组
在第2步,我们比较了每个集合的第一个成员,发现集合2中的第一项最小,所以我们将其添加到组合集合中。
XX X X步骤3:X X XX X X XX X X XX X X X X X X X机组1机组2组合机组
在步骤3,我们比较了每个集合的第一个成员,发现集合1中的第一项最小,因此我们将其添加到组合集合中。
X(X)X X步骤4:X X XX X X XX X X XX X X X X X X X机组1机组2组合机组
在第4步,我们比较了每个集合的第一个成员,发现集合2中的第一项最小,所以我们将其添加到组合集合中。
X(X)X X X步骤5:X X XX X X XX X X XX X X X X X X X机组1机组2组合机组
在第5步,我们比较第一个成员并查看集合2中的第一项是最小的,因此我们将其添加到组合集合中。
XX X X第六步:X X XX X X XX X X XX X X X X X X X机组1机组2组合机组
在第6步,我们看到集合2在开始时是空的,所以我们可以将已经排序的集合1的剩余部分添加到组合集合中。因此,组合集已经排序。
使用合并排序的可视化示例
X X X XX X X X X X X XX X X X X X X X步骤1:X X X X X X X X X X X X X X X XX X X X X X X X X-X X XX X X X X X X X XX X X X-X X XX X X X X X X X X-X X X×X X X
第1步显示了长度为1到7的“木棍”的随机分布。我们希望使用mergesort对这些进行排序,以便最短的棒位于左侧。
X X X XX X X X X X X XX X X X X X X X×X X X第二步:X X X X X X X X X X X X X X XX X X X X X X X X-X X XX X X X X X X X XX X X X-X X XX X X X X X X X X-X X X×X X X
第2步是比较集合中每对成员并将较小的放在左边的结果。1/2、3/4、5/6、7/8、13/14和15/16已经正确放置在左边的小的位置上,但我们将9/10和11/12的位置调换了。
X X X XX X X X X X X XX X X X X X X X×X X X第三步:X X X X X X X X XX X XX X X X X X X X X-X X XX X X X X X X X XX X X X-X X XX X X X X X X X X-X X X×X X X
步骤3是排序过程变得直观的步骤。现在我们已经按顺序排列了每对,我们将相邻的对合并(1/2合并为3/4;5/6合并为7/8;依此类推)。这是通过比较每对中最小的(即第一个)成员,然后选择这两个成员中最小的,然后重复,直到两对都清空。因此,1-4被排序,5-8、9-12和13-16也是如此。
X X X XX X X X X X X XX X X X X X X X×X X X第四步:X X X X X X X X XX X XX X X X X X X X X-X X XX X X X X X X X XX X X X-X X XX X X X X X X X X-X X X×X X X
第4步是已经排序的集合1-4和5-8的合并,以及集合9-12和13-16的合并。只需比较每个贡献集的第一个成员并添加最小的成员,然后重复操作,直到两个贡献集都为空。剩下两个排序集,1-8和9-16。
X X X XX X X X X X XX X X X X X X X×X X X第五步:X X X X X X X X XX X XX X X X X X X X X-X X XX X X X X X X X XX X X X-X X XX X X X X X X X X-X X X×X X X
第5步显示了完整的结果。剩下的两组分类棒(1-8和9-16)使用相同的合并程序合并在一起(比较每组中的第一组,取最小的,重复直到两个堆栈都是空的)。
主题变奏曲
合并主题有很多变体。一些合并排序同时合并两个以上的集合,从三个或更多集合中选择最小的集合。其他技术将大集合分解为小集合,使用另一种针对小集合优化的技术对这些小集合进行排序(例如快速排序),然后将这些排序的片段合并在一起。
就个人而言,我发现合并排序不仅是了解如何为排序的有用工具编程,但我也用它来分类房子周围的物品,例如配方s和甲板扑克牌,其中有大量项目,使用其他技术很难。