Algorithm 有人能给我解释一下自下而上合并排序中每个循环和变量的含义吗?
我很难理解自下而上合并排序算法的伪代码 从概念上讲,我有点理解发生了什么Algorithm 有人能给我解释一下自下而上合并排序中每个循环和变量的含义吗?,algorithm,sorting,pseudocode,Algorithm,Sorting,Pseudocode,我很难理解自下而上合并排序算法的伪代码 从概念上讲,我有点理解发生了什么 我们遍历数组并将每个元素分离到它自己的数组中 我们合并前两个相邻数组(每个数组包含1个元素)以创建一个包含2个元素的新排序数组 我们再次遍历数组,这一次将放入数组的元素数量增加了一倍 一个新的数组。这些元素已经按照前面的合并和迭代步骤进行了排序 我们合并前两个相邻的数组(这次每个数组包含2个排序元素),以创建一个包含4个元素的新排序数组 此过程将继续,直到对整个数组进行排序 我在看这个网站的伪代码- 输入:数组a[]索引范
输入:数组a[]索引范围为0到n-1。
m=1
而m
但是我在第一个while循环后迷路了!递归实现对我来说更直观,但迭代方法让我感到厌烦!如果任何人都可以在Python或C++中实现它,并解释每一个步骤,以及每个变量是什么,我将非常感激。p>
干杯
m
是被排序在一起的元素数。它从1个元素开始,一直加倍,直到我们将列表的一半与另一半合并。
n
是列表的大小。
i
是要合并的第一个子阵列的第一个元素的索引。
i+m
是正在合并的第二个子阵列的第一个元素
这里有一个简单的例子
Say I have the following n=5 list: a = [3,1,2,5,4]
m = 1:
Merge each 1 element subarray with its 1 element neighbor subarray
i = 0:
Merge [3] and [1] -> [1,3]
a is now [1,3,2,5,4]
i = 2:
Merge [2] and [5] -> [2,5]
a is now [1,3,2,5,4]
m = 2:
Merge each 2 element subarray with its 2 element neighbor subarray
i = 0:
Merge [1,3] and [2,5] -> [1,2,3,5]
a is now [1,2,3,5,4]
m = 4:
Merge each 4 element subarray with its 4 element neighbor subarray
i = 0:
Merge [1,2,3,5] and [4]
a is now [1,2,3,4,5]. We're done sorting.
看。这是代码执行情况的可视化。我建议尝试使用一组无序的索引卡,每个索引卡上都写有一个数字。手工按照说明进行操作,看看为什么甲板最终会被分类。我会在某个时候尝试一下,以解决未来的分类问题。我通常写在草稿纸上看发生了什么,但是卡片的建议听起来很有趣。谢谢。啊,我现在明白了。谢谢你说得更清楚。这很有帮助。
Say I have the following n=5 list: a = [3,1,2,5,4]
m = 1:
Merge each 1 element subarray with its 1 element neighbor subarray
i = 0:
Merge [3] and [1] -> [1,3]
a is now [1,3,2,5,4]
i = 2:
Merge [2] and [5] -> [2,5]
a is now [1,3,2,5,4]
m = 2:
Merge each 2 element subarray with its 2 element neighbor subarray
i = 0:
Merge [1,3] and [2,5] -> [1,2,3,5]
a is now [1,2,3,5,4]
m = 4:
Merge each 4 element subarray with its 4 element neighbor subarray
i = 0:
Merge [1,2,3,5] and [4]
a is now [1,2,3,4,5]. We're done sorting.