合并排序数组

时间:2017-01-24 04:49:54

标签: java arrays algorithm

嗨我有一个包含9个元素的数组

10,5,2,4,6,1,3,2,6

我必须使用合并排序算法对此进行排序。我的问题是6被使用了两次,所以它将如何影响排序。

1 个答案:

答案 0 :(得分:0)

要了解如何对其进行排序,让我们看看合并排序算法是如何工作的。

split each element into partitions of size 1
recursively merge adjancent partitions
  for i = leftPartStartIndex to rightPartLastIndex inclusive
    if leftPartHeadValue <= rightPartHeadValue
      copy leftPartHeadValue
    else: copy rightPartHeadValue
copy elements back to original array

所以让我们来看看给定的数组[10 , 5 , 2 , 4 , 6 , 1 , 3 , 2 , 6]以下是算法的实际运行方式

最初将数组拆分为大小为1的分区。因此,数组中的每个值都是单独的分区。 现在将位置0中的10和位置1中的5合并为1个分区。 从10> 5,将5复制到一个大小为2的新临时数组中,现在右侧分区为空,因此将10复制到其中,因此您现在有一个临时数组[5,10]然后将其复制回原始数组中成立的位置

[5,10,2,4,6,1,3,2,6] 现在将分区[5,10]合并到第二个索引中的[2]。从5开始2,将2复制到临时数组。由于右边的分区是空的,因此复制5到右边的临时数组,与10相似,从而产生[2,5,10]。现在将项目复制回原始数组。 [2,5,10,4,6,1,3,2,6]

现在合并分区[4,6],因为4&lt; 6,将4复制到左侧分区,将6复制到临时阵列的右侧分区,并将它们复制回原始阵列。在这种情况下,数组不变,看起来仍然相同。 [2,5,10,4,6,1,3,2,6]

现在将分区[2,5,10]合并到[4,6],因为2&lt; 4,将2复制到临时阵列,然后从4&lt; 5,将4复制到阵列,然后从5&lt; 6复制5,依此类推,直到我们有一个新的分区临时数组[2,4,5,6,10],然后将元素复制到原始数组[2,4,5,6,10,1,3,2,6]

现在合并项目[1,3],类似于[2,6],因为分区左侧的值低于右侧的值。然后将[1,3]合并到[2,6]。从1&lt; 2,将1复制到临时数组,然后复制2,依此类推以获取新分区[1,2,3,6]并将其复制回原始数组,使其成为[2,4,5,6,10,1,2,3,6]

最后我们有两个要合并的分区,即[2,4,5,6,10][1,2,3,6]。重复类似的过程,因为1&lt; 2,将1复制到临时数组,然后复制2(因为左分区中的2&lt; = 2在右分区中),因此左分区的值2被复制到临时数组。然后将4与2进行比较,将右分区中的值2复制到新的临时数组中。然后4> 3,复制3然后4&lt; 3 6使4复制,然后5&lt; 6(右分区)使5被复制到临时数组。当我们遇到6(左分区)到6(右分区)并且遵循条件6 <= 6时,来自左分区的值6被复制到临时数组。然后将右分区中的6与10和6 <1进行比较。 10这样,6被复制到临时数组然后10.然后整个临时数组被复制到原始数组,从而使我们获得最终数组。 [1,2,2,3,4,5,6,6,10]