您的位置 首页 编程知识

python实现排序算法的可视化

冒泡排序可视化通过Python的matplotlib库实现,利用FuncAnimation动态展示排序过程。首…


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

python实现排序算法的可视化

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

1. 安装依赖库

确保已安装 matplotlib:

pip install matplotlib
登录后复制

2. 冒泡排序可视化代码

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

立即学习“”;

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="/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="/ai/%E7%AE%97%E5%AE%B6%E4%BA%91">算家云</a>                             <p>高效、便捷的人工智能算力服务平台</p>                             <div class="">                                 <img src="/static/images/card_xiazai.png" alt="算家云">                                 <span>37</span>                             </div>                         </div>                         <a href="/ai/%E7%AE%97%E5%AE%B6%E4%BA%91" class="aritcle_card_btn">                             <span>查看详情</span>                             <img src="/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:控制动画速度(毫秒)

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

以上就是实现的可视化的详细内容,更多请关注php中文网其它相关文章!

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/15523.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部