algorithm - 算法中的pass是什么意思?

标签 algorithm sorting recursion mergesort

我在GATE PYQ 中遇到了一道练习题。 该问题询问合并排序算法中的pass。 下面是问题:

如果使用直接双向归并排序算法对以下元素按升序排序:

 20, 47, 15, 8, 9, 4, 40, 30, 12, 17

那么在算法第二遍之后这些元素的顺序是:

A) 8、9、15、20、47、4、12、17、30、40

B) 8, 15, 20, 47, 4, 9, 30, 40, 12, 17 [正确选项]

C) 15、20、47、4、8、9、12、30、40、17

D) 4、8、9、15、20、47、12、17、30、40

我只是无法找出 pass 的含义以及在这种情况下如何找到它。

递归调用中元素的分布:

         20, 37, 15, 8, 9, 4, 40, 30, 12, 17
                 /                 \
        20, 47, 15, 8, 9       4, 40, 30, 12, 17
       /        \                     /          \
 20, 47, 15     8, 9              4, 40, 30      12, 17
    /    \
20, 47   15

排序后:

           4 ,8, 9, 15, 12, 17, 20, 30, 40, 47 
                 /                     \
     8, 9, 15, 20, 47               4, 12, 17, 30, 40
       /        \                     /          \
 20, 15, 47     8, 9              4, 30, 40      12, 17
    /    \
20, 47   15

最佳答案

术语“pass”的使用意味着问题是在询问自下而上的合并排序,该排序首先将 n 个元素的数组视为大小为 1 的 n 个游程。每次遍历都会合并偶数和奇数游程,使游程大小加倍(除了最后一次运行可能会更短)。当运行大小 >= 元素数时排序完成。

|20|47|15| 8| 9| 4|40|30|12|17|   start
|20 47| 8 15| 4  9|30 40|12 17|   after pass 1
| 8 15 20 47| 4  9 30 40|12 17|   after pass 2
| 4  8  9 15 20 30 40 47|12 17|   after pass 3
| 4  8  9 12 15 17 20 30 40 47|   after pass 4, done

关于algorithm - 算法中的pass是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66468520/

相关文章:

python - 如何找出K-最近邻算法中属性的权重?

algorithm - 为什么 QuickSort 不擅长对几乎已排序的数据进行排序

python - 谁能告诉我快速排序代码中的错误是什么

python - 混淆递归中的对象引用行为

windows - 递归搜索 HKU 注册表配置单元以获取 DWORD 值

javascript - 递归扩展json对象

javascript - 这种排序可以更优雅/递归吗

algorithm - 具有跨文件压缩表的文件系统

java - 在 O(n^2) 中查找数组中的所有三元组

java - 字符串的线性时间排序算法?