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

排序算法可视化能帮助理解不同算法的工作过程。用 Python 结合 matplotlib 和 FuncAnimation 可以轻松实现动态展示。下面是一个完整的冒泡排序可视化示例,你也可以扩展到其他算法。
1. 安装依赖库
确保已安装 matplotlib:
pip install matplotlib
2. 冒泡排序可视化代码
以下代码生成随机数组并动态展示冒泡排序过程:
立即学习“Python免费学习笔记(深入)”;
算家云
高效、便捷的人工智能算力服务平台
37 查看详情
import matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationimport random生成随机数据
data = [random.randint(1, 100) for _ in range(25)]n = len(data)
设置图形
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)))
每次比较后更新的计数器
iteration = [0]text = ax.text(0.02, 0.95, "", transform=ax.transAxes)
def bubble_sort_step():
生成每一步的状态
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] += 1current_data, i, j = frame_datafor 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:控制动画速度(毫秒)
基本上就这些,不复杂但容易忽略细节。
以上就是python实现排序算法的可视化的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/599399.html
微信扫一扫
支付宝扫一扫