值得一看
广告
彩虹云商城
广告

热门广告位

python实现排序算法的可视化

冒泡排序可视化通过Python的matplotlib库实现,利用FuncAnimation动态展示排序过程。首先生成随机数据并创建柱状图,通过bubble_sort_step函数逐步执行排序,每次比较后用yield返回当前状态,update_plot函数更新图形界面,高亮正在比较的元素,实时显示迭代次数。将bubble_sort_step替换为其他排序算法的生成函数(如插入排序),即可扩展支持更多算法。关键点包括使用yield分步返回、FuncAnimation控制动画帧、颜色标识比较对象、interval调节动画速度,从而直观呈现算法执行流程。

python实现排序算法的可视化

排序算法可视化能帮助理解不同算法的工作过程。用 Python 结合 matplotlibFuncAnimation 可以轻松实现动态展示。下面是一个完整的冒泡排序可视化示例,你也可以扩展到其他算法。

1. 安装依赖库

确保已安装 matplotlib:

pip install matplotlib

2. 冒泡排序可视化代码

以下代码生成随机数组并动态展示冒泡排序过程:

立即学习“Python免费学习笔记(深入)”;

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random
<h1>生成随机数据</h1><p>data = [random.randint(1, 100) for _ in range(25)]
n = len(data)</p><h1>设置图形</h1><p>fig, ax = plt.subplots()
ax.set_title("Bubble Sort Visualization")
bar_rects = ax.bar(range(len(data)), data, align="edge")
ax.set_xlim(0, n)
ax.set_ylim(0, int(1.1 * max(data)))</p><h1>每次比较后更新的计数器</h1><p>iteration = [0]
text = ax.text(0.02, 0.95, "", transform=ax.transAxes)</p><p>def bubble_sort_step():</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="https://www.php.cn/ai/%E7%AE%97%E5%AE%B6%E4%BA%91">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679969239968.png" alt="算家云">
</a>
<div class="aritcle_card_info">
<a href="https://www.php.cn/ai/%E7%AE%97%E5%AE%B6%E4%BA%91">算家云</a>
<p>高效、便捷的人工智能算力服务平台</p>
<div class="">
<img src="https://www.php.cn/static/images/card_xiazai.png" alt="算家云">
<span>37</span>
</div>
</div>
<a href="https://www.php.cn/ai/%E7%AE%97%E5%AE%B6%E4%BA%91" class="aritcle_card_btn">
<span>查看详情</span>
<img src="https://www.php.cn/static/images/cardxiayige-3.png" alt="算家云">
</a>
</div>
<h1>生成每一步的状态</h1><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">for i in range(n):
for j in range(n - i - 1):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
yield data.copy(), j, j + 1  # 返回当前状态和比较位置
yield data, -1, -1  # 排序完成

def update_plot(frame_data):
iteration[0] += 1
current_data, i, j = frame_data
for rect, val in zip(bar_rects, current_data):
rect.set_height(val)
text.set_text(f”Iterations: {iteration[0]}”)

# 高亮正在比较的柱子
for k, rect in enumerate(bar_rects):
if k == i or k == j:
rect.set_color('red')
else:
rect.set_color('skyblue')
return bar_rects

开始动画

anim = FuncAnimation(fig, func=update_plot, frames=bubble_sort_step,
repeat=False, interval=50, cache_frame_data=False)

plt.show()

3. 扩展到其他排序算法

只需替换生成步骤的函数即可。例如插入排序:

def insertion_sort_step():
for i in range(1, n):
key = data[i]
j = i - 1
while j >= 0 and data[j] > key:
data[j + 1] = data[j]
j -= 1
yield data.copy(), j, j + 1
data[j + 1] = key
yield data.copy(), -1, -1

bubble_sort_step() 替换为 insertion_sort_step() 即可看到插入排序动画。

4. 关键点说明

  • yield:每次交换后返回当前状态,供动画逐帧绘制
  • FuncAnimation:自动调用 update_plot 更新图形
  • 颜色高亮:红色表示正在比较的元素,增强可读性
  • interval:控制动画速度(毫秒)

基本上就这些,不复杂但容易忽略细节。

相关标签:

java python edge 排序算法 冒泡排序 red Python matplotlib for 冒泡排序 插入排序 对象 算法

大家都在看:

解决PySpark在JupyterLab中Java组件找不到及网关退出问题
Java调用Python脚本:解决9009错误及最佳实践
Java调用Python脚本:深入解析9009错误码及解决方案
Java调用Python脚本:深入解析9009错误及跨语言交互实践
解决Java调用Python脚本时返回9009错误码的问题
温馨提示: 本文最后更新于2025-10-12 22:29:38,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容