为什么我们将数组分配到合并排序中的一个元素

时间:2016-05-31 10:45:59

标签: algorithm sorting merge

我正在阅读合并排序算法。我有一个问题

假设我们有以下列表

list = 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元素

3 个答案:

答案 0 :(得分:6)

1元素列表自然排序。 我们合并两个1元素排序列表以获得2元素排序列表,然后合并2元素排序列表以获得4元素排序列表,依此类推。

合并过程适用于排序列表,因此我们无法将合并应用于未排序的5 4 1 36 8 9 7列表

答案 1 :(得分:2)

理论上,它是因为合并程序需要采用两个排序列表。 4元素列表没有排序,而单元素列表是。

在实践中,我们不会将列表拆分为单元素。因为合并排序不是小列表最有效的排序算法,所以插入排序是。因此,常见的优化是使用插入排序对小列表进行排序,并将它们与合并排序合并。

答案 2 :(得分:1)

因为如果以合并排序的方式执行它,则存在一个不变量,表示合并列表(拆分后)已排序,这意味着在合并拆分列表后的每个级别,合并列表都是有序的。

例如,如果在拆分成4-4之后立即合并,将比较两个列表的第一项,而这两个值可能不是这些拆分列表的最小值,这意味着你最终会得到具有最有可能未排序的排序的结果列表。