Algorithm 有人能给我解释一下自下而上合并排序中每个循环和变量的含义吗?

Algorithm 有人能给我解释一下自下而上合并排序中每个循环和变量的含义吗?,algorithm,sorting,pseudocode,Algorithm,Sorting,Pseudocode,我很难理解自下而上合并排序算法的伪代码 从概念上讲,我有点理解发生了什么 我们遍历数组并将每个元素分离到它自己的数组中 我们合并前两个相邻数组(每个数组包含1个元素)以创建一个包含2个元素的新排序数组 我们再次遍历数组,这一次将放入数组的元素数量增加了一倍 一个新的数组。这些元素已经按照前面的合并和迭代步骤进行了排序 我们合并前两个相邻的数组(这次每个数组包含2个排序元素),以创建一个包含4个元素的新排序数组 此过程将继续,直到对整个数组进行排序 我在看这个网站的伪代码- 输入:数组a[]索引范

我很难理解自下而上合并排序算法的伪代码

从概念上讲,我有点理解发生了什么

  • 我们遍历数组并将每个元素分离到它自己的数组中
  • 我们合并前两个相邻数组(每个数组包含1个元素)以创建一个包含2个元素的新排序数组
  • 我们再次遍历数组,这一次将放入数组的元素数量增加了一倍 一个新的数组。这些元素已经按照前面的合并和迭代步骤进行了排序
  • 我们合并前两个相邻的数组(这次每个数组包含2个排序元素),以创建一个包含4个元素的新排序数组
  • 此过程将继续,直到对整个数组进行排序 我在看这个网站的伪代码-

    输入:数组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.