我正在阅读合并排序算法。我有一个问题
假设我们有以下列表
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元素
答案 0 :(得分:6)
1元素列表自然排序。 我们合并两个1元素排序列表以获得2元素排序列表,然后合并2元素排序列表以获得4元素排序列表,依此类推。
合并过程适用于排序列表,因此我们无法将合并应用于未排序的5 4 1 3
和6 8 9 7
列表
答案 1 :(得分:2)
理论上,它是因为合并程序需要采用两个排序列表。 4元素列表没有排序,而单元素列表是。
在实践中,我们不会将列表拆分为单元素。因为合并排序不是小列表最有效的排序算法,所以插入排序是。因此,常见的优化是使用插入排序对小列表进行排序,并将它们与合并排序合并。
答案 2 :(得分:1)
因为如果以合并排序的方式执行它,则存在一个不变量,表示合并列表(拆分后)已排序,这意味着在合并拆分列表后的每个级别,合并列表都是有序的。
例如,如果在拆分成4-4之后立即合并,将比较两个列表的第一项,而这两个值可能不是这些拆分列表的最小值,这意味着你最终会得到具有最有可能未排序的排序的结果列表。