数据结构和算法篇-归并排序的两个视角-迭代和递归

在学习归并排序时,我们常常会发现它既可以用 迭代 的方式实现,也可以用递归的方式实现。

这两种思维方式虽然过程不同,但都体现了同一个核心思想:分而治之

在本文中,我们将从"自底向上的迭代"出发,逐步过渡到"自顶向下的递归",看清这两种方法背后的逻辑关系,并理解为什么递归版本更能揭示归并排序的本质。

视角1:自底向上的迭代

我们可以使用迭代的自底向上方法构建了归并排序。

  • 我们从大小为1的子列表开始,系统地合并相邻对
  • 在每一层级将子列表大小加倍,直到整个数组排序完成。

可视化这个过程:

txt 复制代码
Level 0: [64] [34] [25] [12] [22] [11] [90] [88]  ← Start with size 1
Level 1: [34,64] [12,25] [11,22] [88,90]          ← Merge to size 2
Level 2: [12,25,34,64] [11,22,88,90]              ← Merge to size 4
Level 3: [11,12,22,25,34,64,88,90]                ← Merge to size 8 ✓

这是自底向上策略:从最小的部分向上构建到完整解决方案。

MergeSort迭代版

视角2:自顶向下的递归

如果我们不是从大小为1开始构建,而是从整个数组开始并向下处理呢?

自顶向下的思路:

  • 想要排序整个数组?将其分成两半。
  • 对每一半进行排序(以某种方式------我们会解决这个问题)。
  • 合并两个已排序的半部分(我们已经知道如何做到这一点!)。

可视化这个过程:

txt 复制代码
[64, 34, 25, 12, 22, 11, 90, 88]       ← Start with full array
                  ↓
[64, 34, 25, 12]  |  [22, 11, 90, 88]  ← Split
                  ↓
[12, 25, 34, 64]  |  [11, 22, 88, 90]  ← Sort these halves
                  ↓
[11, 12, 22, 25, 34, 64, 88, 90]       ← Now merge them ✓

但是等等。我们如何"对每一半进行排序"?

使用相同的策略!将每一半再分成两半,对四分之一部分排序,然后合并它们。

那如何对那些四分之一部分排序呢?

再次分割!持续分割直到我们到达单个元素,它们已经是排序好的。

小结:同一算法的两种思维

归并排序的两种实现方式反映了算法设计的两种思维路径:

  • 迭代版本强调结构化、逐层推进的控制逻辑;
  • 递归版本则揭示了问题自身的层次性与自相似结构。

理解递归不仅能帮助你更好地掌握归并排序,更是进入计算机科学中 "分而治之" 思想世界的关键一步。

相关推荐
handler012 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie19 分钟前
实数列的常用递推模式
算法
我星期八休息24 分钟前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
代码小书生28 分钟前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星29 分钟前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室36 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz40 分钟前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
leoufung1 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
小O的算法实验室1 小时前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
你撅嘴真丑1 小时前
map 与 set容器的应用--话题焦点人物
数据结构