【发布时间】:2016-05-31 10:45:59
【问题描述】:
我正在阅读合并排序算法。我有一个问题
假设我们有以下列表
列表 = 5 4 1 3 6 8 9 7
首先将列表分成 4 个 -4 个元素。我们称左右侧列表
5 4 1 3 and 6 8 9 7
然后将 5 4 1 3 分成如下
5 4 and 1 3
然后把5和4分成
5 4
排序时,我们将从最后一步开始排序,一直到第 1 步(我们有 4-4 个元素)
问题:无论如何,当我们将列表划分为 1-1 个元素并且我们随时对列表进行排序和合并时,为什么不只将列表划分为 4-4 个元素。因为在这种情况下,我们也会合并列表。为什么要迭代到 1-1 个元素
【问题讨论】:
-
基本情况发生在当前迭代有一个或两个元素时。发生这种情况时,算法将返回单个元素,或对两个元素进行就地排序。这假设您正在使用合并排序的递归实现,我假设您是。
-
因为只有一个元素的数组已经排好序了。
-
为了澄清 Tim Biegeleisen 的评论,合并排序的自下而上/迭代实现跳过了数组的所有递归拆分,并假设大小为 N 的数组是大小为 1 的 N 个子数组。大多数现实世界的合并排序实现都是自下而上合并排序的一些变体,例如timsort。