用 Sorting-Algorithms-Blender 看懂归并排序分治策略如何一步步合并出有序数组【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender归并排序Merge Sort是算法学习中绕不开的经典排序算法它的时间复杂度稳定在 O(n log n)而它背后的分治策略更是理解众多高级算法的钥匙。很多新手卡在为什么先拆成一半最后又能拼成有序数组这一步用 Sorting-Algorithms-Blender 项目把归并排序做成 3D 动画就能直观看到每一层分解与合并的过程。这个开源项目基于 Blender Python API把抽象的数组操作变成看得见的几何体运动是入门归并排序可视化、学习分治思想的绝佳工具。什么是归并排序先搞懂分治策略这个核心思想归并排序之所以高效是因为它采用分治策略Divide and Conquer把一个大问题拆成若干小问题逐个击破后再合并结果。整个过程只有三步分解Divide把数组从中间一分为二得到两个子数组解决Conquer递归地对每个子数组继续分解直到每个子数组只剩 1 个元素——单个元素天然有序合并Combine把两个已排序的子数组合并成一个更大的有序数组逐层向上最终得到完整的有序数组。以[38, 27, 43, 3, 9, 82, 10]为例动画中你会看到它先被拆成[38, 27, 43]和[3, 9, 82, 10]再继续拆到单个元素然后从两个两个开始合并排序。排序顺序与分解顺序恰好相反这也是归并排序最反直觉也最迷人的地方。归并排序分治三步走拆到不能再拆再逐层合并在 Sorting-Algorithms-Blender 里运行归并排序脚本你能清楚看到两个阶段交替进行第一步递归分解直到单个元素数组被不断从中间切开动画中表现为物体不断被分成左右两组。这个过程的实现非常简洁核心就是递归调用自身def merge_sort(arr, l, r): if l r: m l (r - l) // 2 # 找到中点 merge_sort(arr, l, m) # 排序左半部分 merge_sort(arr, m 1, r) # 排序右半部分 merge(arr, l, m, r) # 合并两个有序部分这段逻辑就在 merge_sort_scale.py 中可以说是归并排序的灵魂代码。第二步合并有序子数组关键在双指针合并是归并排序的核心操作同时比较两个有序子数组的头部元素谁小谁先进入结果数组。动画中你能看到两边的物体被交替挑选出来正是这个比较过程。第三步逐层归并形成最终有序数组每一层合并都会产生一个更大的有序子数组直到顶层完成整个数组的排序。动画中观察这一层层的收缩-排序-重组比任何文字解释都直观。用 Blender 看归并排序动画4 种可视化风格任你选Sorting-Algorithms-Blender 项目用 4 种不同方式呈现同一套归并排序逻辑每种都值得运行一遍目录可视化方式数值表示排序依据sort_scale立方体高度位置立方体缩放值sort_color平面渐变色位置材质红绿通道sort_circle环形旋转体旋转角度材质 HSV 色相sort_combined立体立方体阵列位置多组 2D 数组其中 merge_sort_scale.py 最教学友好——它用几何节点实时显示Comparisons比较次数和Array Accesses数组访问次数两个计数器运行完一帧帧回放就能直观感受归并排序的 O(n log n) 时间复杂度和 O(n) 空间复杂度从何而来。跟着做在 Blender 中运行归并排序脚本的 3 个步骤想亲眼看到归并排序动画只需三步新手也能 5 分钟上手安装并启动 Blender下载后直接打开即可打开脚本文件在 Blender 的 Text Editor文本编辑器中打开任一归并排序脚本例如 sort_circle/merge_sort_circle.py点击运行按钮按下 Run Script动画就自动生成拖动时间轴即可回放整个归并排序过程。想调整排序规模只需修改脚本末尾的setup_array()参数比如 merge_sort_color.py 中的setup_array(24)注意该脚本只接受偶数而 merge_sort_circle.py 默认生成了 180 个元素画面更为壮观。归并排序的时间复杂度为什么稳定在 O(n log n)看完整段动画再回头理解复杂度就水到渠成了分解阶段数组每次减半共约 log₂n 层每层处理 n 个元素因此总复杂度为O(n log n)最坏情况无论数据如何排列归并排序都要完整走完分解与合并因此最好、平均、最坏情况都是 O(n log n)这一点在 README.md 的复杂度表中有完整标注空间复杂度合并时需要临时数组存放左右子数组所以额外空间为O(n)这是它不如堆排序、快速排序省内存的地方。归并排序 vs 其他排序算法一张表看懂差距用 Sorting-Algorithms-Blender 依次运行其他排序脚本对比会更容易建立算法直觉算法最好情况平均情况最坏情况空间复杂度归并排序Ω(n log n)Θ(n log n)O(n log n)O(n)快速排序Ω(n log n)Θ(n log n)O(n²)O(log n)堆排序Ω(n log n)Θ(n log n)O(n log n)O(1)冒泡排序Ω(n)Θ(n²)O(n²)O(1)插入排序Ω(n)Θ(n²)O(n²)O(1)归并排序的最大优势是稳定且可预测——无论输入数据是正序、乱序还是逆序性能都不会退化这也是它常被用于数据库排序、外部排序的底层原因。其他排序脚本分别位于 sort_color、sort_scale 与 sort_circle 目录搭配观看对比效果更佳。总结把归并排序看明白分治思想自然就懂了归并排序的本质一句话就能概括不断对半拆、有序地合。而 Sorting-Algorithms-Blender 把这句话变成了一部生动的 3D 动画——物体一次次被分开、又一次次按序归位整个过程清晰呈现分治策略如何一步步合并出有序数组。如果你想彻底掌握归并排序不妨克隆仓库git clone https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender亲手运行一遍动画看懂它的那一刻你会觉得算法的世界突然变得简单又美丽。【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考