当前位置: 首页 > news >正文

算法实现迭代4_冒泡排序

在之前汇总的所有算法 整理汇总各排序算法(用python实现) 的基础上,不断迭代更新使得功能,使得越来越完善.

一.冒泡排序

#06 冒泡排序
'''
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端
'''
def bubbleSort(arr):n = len(arr)print("循环内n为:",n)# 遍历所有数组元素for i in range(n):# 最后i个元素已经就位for j in range(0, n-i-1):if arr[j] > arr[j+1] :arr[j], arr[j+1] = arr[j+1], arr[j]arr = [64, 34, 25, 12, 22, 11, 90]
print('初始序列为:',arr)
bubbleSort(arr)
print ("\n冒泡排序后的数组:")
for i in range(len(arr)):print ("%d" %arr[i]),

二.冒泡排序简化

#06.2 冒泡排序def bubbleSort(arr):n = len(arr)# 遍历所有数组元素for i in range(n):# 最后i个元素已经就位for j in range(0, n-i-1):if arr[j] > arr[j+1] :arr[j], arr[j+1] = arr[j+1], arr[j]arr = [64, 34, 25, 12, 22, 11, 90]
print("\n初始序列长为:{}\n序列为:{}".format(len(arr),arr))
bubbleSort(arr)
print(f"\n希尔排序横向输出后为:\n{arr}")

三.冒泡排序可视化保存

#06.3 冒泡排序可视化保存import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np#冒泡排序可视化:展示相邻元素比较交换过程
def bubble_sort_visual(arr, ax, title="冒泡排序过程", save_path="冒泡排序.gif"):frame_list = []  # 记录排序过程中的每一步状态original_arr = arr.copy()  # 保留原始数据副本# ================== 冒泡排序核心算法 ==================n = len(arr)for i in range(n):# 记录每轮开始前的状态frame_list.append(arr.copy())# 最后i个元素已经有序for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:# 交换相邻元素arr[j], arr[j + 1] = arr[j + 1], arr[j]# 记录每次交换后的状态frame_list.append(arr.copy())# ================== 可视化设置 ==================ax.set_xlim(-0.5, len(arr) - 0.5)ax.set_ylim(0, max(original_arr) * 1.2)ax.set_title(title, fontsize=16, fontproperties='SimHei')ax.set_xticks([])ax.set_yticks([])# 颜色映射(数值越大颜色越深)colors = plt.cm.Blues(np.linspace(0.3, 1, len(arr)))bars = ax.bar(range(len(arr)), original_arr,color=colors, edgecolor='black', linewidth=0.5)# 数值标签offset = 0.3text_labels = [ax.text(i, original_arr[i] + offset, str(original_arr[i]),ha='center', va='bottom', fontsize=10, fontproperties='SimHei')for i in range(len(original_arr))]# ================== 动画更新 ==================def update(frame):# 更新柱子高度for i, bar in enumerate(bars):bar.set_height(frame[i])# 更新颜色(根据当前值重新映射)norm = plt.Normalize(0, max(frame))colors = plt.cm.Blues(norm(frame))for bar, color in zip(bars, colors):bar.set_color(color)# 更新数值标签for i, text in enumerate(text_labels):text.set_y(frame[i] + offset)text.set_text(str(frame[i]))return bars, text_labelsani = animation.FuncAnimation(fig, update, frames=frame_list,interval=300,  # 每帧间隔300msblit=False, repeat=False)ani.save(save_path, writer='pillow', fps=10, dpi=100)return ani# ================== 使用示例 ==================
if __name__ == "__main__":# 设置中文字体plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 初始化数据arr = [64, 34, 25, 12, 22, 11, 90]fig, ax = plt.subplots(figsize=(14, 6))# 生成动画ani = bubble_sort_visual(arr, ax,title="冒泡排序动态演示",save_path="./冒泡排序演示.gif")plt.tight_layout()plt.show()

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

http://www.dtcms.com/a/499178.html

相关文章:

  • uploads-labs靶场通关(1)
  • 网站建设标准合同福州做网站的公司多少钱
  • 类转函数(Class to Function)
  • Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
  • Makefile 模式规则精讲:从 ​​%.o: %.c​​ 到静态模式规则的终极自动化
  • app免费下载网站地址进入产品做网站如何谁来维护价格
  • 网站开发客户流程 6个阶段自助贸易网
  • Java前缀和算法题目练习
  • 《Python 结构化模式匹配深度解析:从语法革新到实战应用》
  • h5游戏免费下载:机甲战士
  • 接口测试 | 使用Postman实际场景化测试
  • 键盘事件对网站交互商业网站设计的基本原则
  • 设计模式的底层原理——解耦
  • 蚌埠市重点工程建设管理局网站国家住房与城乡建设部网站
  • USB 特殊包 --PRE
  • 十六、kubernetes 1.29 之 集群安全机制
  • 固定资产使用年份入错了怎么调整?
  • Linux Shell 正则表达式:从入门到实战,玩转文本匹配与处理
  • 网站建设的功能有哪些内容在线医生免费咨询
  • Gituee
  • 简洁软件下载网站源码做网站服务器多钱
  • java.nio 包详解
  • python+django/flask婚纱摄影拍照管理系统
  • SpringBoot 集成 ELK 实现系统操作日志存储方案
  • 如何解决 Jacob 与 Tomcat 类加载问题:深入分析 Tomcat 类加载机制与 JVM 双亲委派机制
  • AVL树(平衡二叉树)详细介绍与Java实现
  • 2025年市场岗位能力重构与跨领域转型路径分析
  • SQL UNIQUE约束详解
  • 【unity实战】MapMagic 2实战例子
  • 系统找不到文件