嗨我有一个包含9个元素的数组
10,5,2,4,6,1,3,2,6
我必须使用合并排序算法对此进行排序。我的问题是6被使用了两次,所以它将如何影响排序。
答案 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]