ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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-BlenderSorting-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.pysort_scale/shell_sort_scale.pysort_scale/insertion_sort_scale.pysort_scale/selection_sort_scale.py3 步快速上手在 Blender 里运行排序算法动画想在本地亲眼看到这些动画只需要 3 步安装并启动 Blender官网免费下载跨平台支持。打开 Blender 的Text Editor文本编辑器载入上述任意一个.py脚本。点击运行按钮等待脚本自动创建物体、插入关键帧然后播放动画即可。项目源码可以通过 git clone 获取git clone https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender如果只是想快速体验建议先跑sort_scale下的脚本动画最直白、反馈最清晰。堆排序动画二叉堆的建堆—取根之旅堆排序基于二叉堆数据结构整个过程可以分成两段看建堆把乱序数组调整成一个最大堆父节点大于子节点。取根反复把堆顶的最大值扔到数组末尾再对剩余部分重新堆化。在动画里你会看到柱子先是层层调整地堆出金字塔结构然后最高的一根柱子被不断取出、放到末尾剩下的部分继续重新排列。整个过程环环相扣非常像从金字塔顶端不断抽走最大的砖块。堆排序最厉害的地方在于它的最好、平均、最坏情况时间复杂度都是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_circle、sort_color、sort_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),仅供参考
返回列表