关于合并排序代码中的合并步骤的混淆

时间:2014-12-29 16:54:08

标签: algorithm sorting mergesort

我有一个关于数组上的Merge Sort如何工作的问题。 我理解'划分' step,将输入数组分成1个长度的元素。但是,当涉及到' merge'部分(合并步骤),我感到困惑。 例如,给定输入3 5 1 8 2,除法过程将产生5个元素:3,5,1,8,2。我只知道合并功能会将它们组合成3 5,1 8,2,但它如何继续组合3 5和1 8?是否存在“联合收割机”中涉及的递归。一部分?

2 个答案:

答案 0 :(得分:0)

这个动画可以帮到你。

http://en.wikipedia.org/wiki/File:Merge-sort-example-300px.gif

这个过程是这样的:

3 5 1 8 2

3,5,1,8,2

3 5,1 2 8

1 2 3 5 8

  1. 从n个输入项目的未排序列表I开始。
  2. 将我分成两部分I1和I2,有天花板(n / 2)和地板(n / 2)项目。
  3. 递归排序I1,产生排序列表S1。
  4. 递归排序I2,产生排序列表S2。
  5. 将S1和S2合并为已排序的列表S.
  6. 在每次迭代时,选择具有来自两个输入列表中的最小键的项,并将其附加到输出列表。由于两个输入列表已排序,因此只有两个项目 测试,所以每次迭代都需要一段时间。

答案 1 :(得分:0)

当两个递归排序例程返回时,您可以放心地假设他们已经对它们的部件进行了排序。合并步骤组合了这两个排序的子数组。如果输入为3 5 1 8 2,则第一个递归调用对前半部分进行排序并生成3 5,第二个递归调用对后半部分进行排序并生成1 2 8。现在,合并步骤通过重复选择两个子数组的两个第一个元素的最小值并将其添加到结果中,将这两个排序的一半合并为一个。

这个过程就像归纳一样。