news 2026/8/18 17:16:43

Sorting-Algorithms-Blender 一次看懂 4 种算法:堆排序、希尔排序、插入排序与选择排序的动画对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sorting-Algorithms-Blender 一次看懂 4 种算法:堆排序、希尔排序、插入排序与选择排序的动画对比

Sorting-Algorithms-Blender 一次看懂 4 种算法:堆排序、希尔排序、插入排序与选择排序的动画对比

【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender

想真正看懂排序算法,光看代码远远不够。Sorting-Algorithms-Blender是一个用 Blender Python API 把经典排序算法变成 3D 动画的开源项目:每个数字是一根立方体柱子,柱子高低代表数值大小,排序过程中柱子不断交换位置,整个过程以关键帧动画的形式呈现在你眼前。本文就用它来一次看懂堆排序、希尔排序、插入排序与选择排序这 4 种算法的动画对比,帮你从"死记代码"升级为"看懂过程"。

📌 本文面向新手与普通用户,不贴大段代码,只讲思路、看动画、比效率。

什么是 Sorting-Algorithms-Blender?

Sorting-Algorithms-Blender 的原理很简单:运行项目里的某个 Python 脚本,Blender 就会自动生成一批基础网格物体(立方体),并按照排序算法执行时数组元素的位置变化,逐帧插入关键帧,最终生成一段完整的排序算法动画

它最大的亮点有两个:

  • 🔍动画还原过程:不是只给结果,而是把每一轮比较、每一次交换都演给你看。
  • 📊内置计数器:画面上还会实时显示"比较次数"和"数组访问次数",让你直观感受算法的工作量。

4 种可视化方式怎么选?sort_scale 目录最直观

项目把可视化脚本分成 4 个文件夹,对应 4 种不同的表现手法:

文件夹数值如何表示位置如何表示额外特性
sort_circle材质 HSV 颜色长方体旋转角度颜色环
sort_color材质红绿通道平面位置自定义渐变色
sort_combined材质颜色平面位置多个二维数组拼成立方体
sort_scale立方体高度(缩放)立方体位置比较次数 + 数组访问计数器

如果你第一次接触这个项目,建议从sort_scale目录入手:柱子越高数值越大,柱子左右移动就是元素交换,一眼就能看懂。本文介绍的 4 种算法,在sort_scale里都有对应的脚本:

  • sort_scale/heap_sort_scale.py
  • sort_scale/shell_sort_scale.py
  • sort_scale/insertion_sort_scale.py
  • sort_scale/selection_sort_scale.py

3 步快速上手:在 Blender 里运行排序算法动画

想在本地亲眼看到这些动画,只需要 3 步:

  1. 安装并启动 Blender(官网免费下载,跨平台支持)。
  2. 打开 Blender 的Text Editor(文本编辑器),载入上述任意一个.py脚本。
  3. 点击运行按钮,等待脚本自动创建物体、插入关键帧,然后播放动画即可。

项目源码可以通过 git clone 获取:

git clone https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender

如果只是想快速体验,建议先跑sort_scale下的脚本,动画最直白、反馈最清晰。🎬

堆排序动画:二叉堆的"建堆—取根"之旅

堆排序基于二叉堆数据结构,整个过程可以分成两段看:

  1. 建堆:把乱序数组调整成一个最大堆(父节点大于子节点)。
  2. 取根:反复把堆顶的最大值"扔"到数组末尾,再对剩余部分重新堆化。

在动画里,你会看到柱子先是"层层调整"地堆出金字塔结构,然后最高的一根柱子被不断取出、放到末尾,剩下的部分继续重新排列。整个过程环环相扣,非常像"从金字塔顶端不断抽走最大的砖块"。

堆排序最厉害的地方在于:它的最好、平均、最坏情况时间复杂度都是O(n log n),而且空间复杂度只有O(1),属于"又稳又快"的选手。

💡 观看技巧:注意动画后期,柱子会从右往左逐渐"定格",那就是已经排好的部分。

希尔排序动画:让插入排序"跳着走"

希尔排序可以理解为插入排序的升级版。普通插入排序每次只能把元素移动一格,而希尔排序先按一个较大"间隔(gap)"把数组分成若干子序列,各自做插入排序,然后逐步缩小间隔,直到间隔为 1 完成最终排序。

动画中你会看到非常独特的画面:柱子不是相邻元素两两交换,而是隔着好几根柱子跳跃式比较,间隔越变越小,画面从"粗犷"逐渐变得"精细",最后像普通插入排序一样收尾。

这种"先粗排、再细排"的思路,让希尔排序在中等规模数据上远快于普通插入排序,平均复杂度约O(n(log n)²),空间复杂度同为O(1)

插入排序动画:像整理扑克牌一样

插入排序的思路人人都会:把数组分成"已排序区"和"未排序区",每次从未排序区取一个元素,插到已排序区合适的位置,就像打扑克时一张张理牌

看动画时,你会看到左边柱子逐渐变得有序,每次从右边"抽"出一根柱子,一路向左"挤"过比自己高的柱子,找到自己的位置插进去。对于基本有序的数据,插入排序表现极佳,最好情况只需O(n);最坏和平均情况为O(n²),空间复杂度O(1)

选择排序动画:每次都挑最小的

选择排序是最"老实"的算法之一:维护一个已排序区和一个未排序区,每一轮都在未排序区里扫描出最小值,然后和未排序区第一个元素交换。

动画中,你会看到每次排序都会有一根"巡视"的柱子从左到右扫过整个区域,找到最小值后把它"请"到最前面。它的特点是交换次数极少(最多 n 次交换),但无论数据是否有序,比较次数都是固定的O(n²),所以最好情况和最坏情况一样慢。

4 种排序算法动画对比:一张表看懂复杂度

看完 4 段动画,再用一张表收拢它们的效率差异(数据来自项目 README 的 Big O 复杂度表):

算法最好情况平均情况最坏情况空间复杂度
堆排序Ω(n log n)Θ(n log n)O(n log n)O(1)
希尔排序Ω(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_scale的脚本在动画画面下方额外渲染了两个实时计数器:

  • Comparisons(比较次数):记录算法执行了多少次元素比较。
  • Array Accesses(数组访问次数):记录算法读写数组的次数。

这两个数字会随着动画逐帧增长,直接告诉你"谁的运算量更大"。这也是项目作者刻意设计的:动画本身只展示元素移动轨迹,而计数器才是反映时间复杂度的直观指标。

总结:为什么推荐用动画学习排序算法?

对新手来说,排序算法最劝退的地方是"看得懂伪代码,看不懂过程"。Sorting-Algorithms-Blender 把抽象的数组操作变成了看得见的柱子移动:

  • ✅ 堆排序让你看懂"建堆—取根"的循环结构;
  • ✅ 希尔排序让你理解"间隔递减"的跳跃式排序;
  • ✅ 插入排序让你体会"逐步理牌"的直觉;
  • ✅ 选择排序让你看清"每轮挑最小"的朴素逻辑。

如果你想连其他算法一起看,项目里还提供了冒泡排序、归并排序、快速排序的脚本,分布在sort_circlesort_colorsort_scale等目录中,甚至还有把多个二维数组拼成立方体的sort_combined/combined_sort_cube.py。打开 Blender,运行一个脚本,花 30 秒看完一段动画,你对排序算法的理解会立刻上一个台阶。🚀

【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 17:16:41

VBrowser-Android新手必读:10个常用操作技巧,轻松缓存网页视频

VBrowser-Android新手必读:10个常用操作技巧,轻松缓存网页视频 【免费下载链接】VBrowser-Android 全网视频嗅探缓存APP 项目地址: https://gitcode.com/gh_mirrors/vb/VBrowser-Android VBrowser-Android 是一款开源的视频嗅探缓存APP&#xff0…

作者头像 李华
网站建设 2026/8/18 17:14:16

HTML5 Word Cloud 快速上手:如何复制粘贴文本生成专属词云

HTML5 Word Cloud 快速上手:如何复制粘贴文本生成专属词云 【免费下载链接】wordcloud HTML5 Word Cloud 项目地址: https://gitcode.com/gh_mirrors/word/wordcloud 想快速把一段文章变成一张漂亮的词云图片?HTML5 Word Cloud 是一款完全免费、开…

作者头像 李华