Python应用实战,用动画生成冒泡排序的过程

写在前言

hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。

希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可以留言或者私信交流。

如果你想看什么主题的文章,欢迎留言交流,关注公号【一点sir】,领取编程资料。

如果你还不了解Python这门语言,要系统性的学习 Python 这门语言,可以查看我的专栏——《Python教程》

今天更新的文章是《Python应用实战,用动画生成冒泡排序的过程》。

冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

用Python实现冒泡排序

现在我们用Python语言来实现一个冒泡排序,这个应该是很简单的,以下是代码,应该很好理解吧。

def bubble_sort(arr):n = len(arr)# 遍历所有数组元素for i in range(n):# Last i elements are already in placefor j in range(0, n-i-1):# 遍历数组从0到n-i-1# 交换如果元素大于下一个元素if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr# 测试冒泡排序函数
arr = [64, 34, 25, 12, 22, 11, 90, 1, 10, 33]
sorted_arr = bubble_sort(arr)
print("Sorted array is:", sorted_arr)

在这个例子中,bubble_sort 函数接受一个列表 arr 作为参数,并在原地进行排序。函数首先获取列表的长度 n,然后使用两个嵌套的循环来遍历列表中的每个元素。外层循环负责遍历整个列表,内层循环则负责比较相邻的元素并在需要时交换它们。

冒泡排序并不是一个高效的排序算法,尤其是对于大型数据集。它的平均时间复杂度和最坏时间复杂度都是 O(n^2),其中 n 是列表中的元素数量。对于实际应用,通常会选择更高效的排序算法,如快速排序、归并排序或堆排序。

用动画实现冒泡排序

要想用动画的方式实现冒泡排序,首先需要选择一个好用的可视化的第三方Python库,这里我们可以使用 matplotlib 库来创建一个简单的可视化效果。

首先,确保你你的环境已经安装了 matplotlib 库。如果还没有安装,可以通过以下命令安装:

pip install matplotlib

下面我们是直接给出实现的代码,后面我们给出详细的解释。

import matplotlib.pyplot as plt
import matplotlib.animation as animationdef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]yield arr.copy()def update(data):# 更新图形,重新绘制数据global step_countfor rect, val in zip(bar_rects, data):rect.set_height(val)plt.title(f"Step {step_count}")step_count += 1data = [64, 34, 25, 12, 22, 11, 90, 1, 10, 33]fig, ax = plt.subplots()
bar_rects = ax.bar(range(len(data)), data, align="edge")# 设置初始步数
step_count = 1# 创建动画对象
anim = animation.FuncAnimation(fig, update, frames=bubble_sort(data.copy()),repeat=False, interval=500
)
anim.save('bubble_sort.gif')

来看下生成的效果:
在这里插入图片描述

代码解释

上面我们最核心的主要部分是matplotlib库中的FuncAnimation类,这是用于创建动画的类,它允许用户通过指定更新函数和帧生成器函数来生成动画。以下是这个类的接口的参数。

FuncAnimation(fig, func, frames, init_func=None, fargs=None, repeat=False, repeat_delay=0, blit=False, interval=200)
fig:需要绘制动画的图形对象。
func:更新函数,每次动画更新时调用该函数。
frames:帧生成器函数,用于生成动画的每一帧。
init_func:初始化函数,用于绘制静态内容。
fargs:更新函数func的参数。
repeat:是否重复播放动画。
repeat_delay:重复播放时的延迟时间。
blit:是否仅绘制变化的部分,可以提高动画绘制效率。
interval:每帧的间隔时间(毫秒)。

在上面的示例代码中,我们使用了FuncAnimation方法来创建动画对象,传入了画布对象fig、更新函数update、排序生成器函数bubble_sort(data.copy())、禁止重复播放(repeat=False)、以及每帧间隔500ms(interval=500)。

FuncAnimation方法在后台会不断调用更新函数update和帧生成器函数bubble_sort(data.copy()),并根据每一帧的数据更新图形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络通信--demo--群聊

群聊实现的关键: 群聊的思想:客户端发送消息后,所有客户端都可以接收到 客户端---->服务端(子)---->客户端(online) online的客户端:需要一个集合存储 package Wechat;imp…

牛客NC222 插入区间【中等 数组,区间合并问题 Java/Go/PHP/C++】lintcode30 插入区间

题目 题目链接: https://www.nowcoder.com/practice/1d784b5472ab4dde88ea2331d16ee909 https://www.lintcode.com/problem/30/solution/56586 思路 Java代码 import java.util.*;/** public class Interval {* int start;* int end;* public Interval(int …

Julia编程08:控制流Control Flow

Julia provides a variety of control flow constructs: Compound Expressions: begin and ;. Conditional Evaluation: if-elseif-else and ?: (ternary operator). Short-Circuit Evaluation: logical operators && (“and”) and || (“or”), and also chained …

【代码随想录训练营】【Day 32】【回溯-6】【待二刷】| Leetcode 332, 51, 37

【代码随想录训练营】【Day 32】【回溯-6】【待二刷】| Leetcode 332, 51, 37 需强化知识点 滑动窗口,固定结束位置版本螺旋数组,建模为编程问题 题目 332. 重新安排行程 sort reverse的用法,以及result.append(airport)的理解 from co…

i2c总线介绍

1. 简介 1.1 I2C总线的历史背景 I2C(Inter-Integrated Circuit)总线最初由Philips Semiconductors(现NXP Semiconductors)在1980年代开发,旨在简化集成电路之间的通信。随着技术的发展,I2C已经成为一种广…

【数据结构】哈希表的原理及其实现

文章目录 哈希表的概念哈希函数的设计常见的哈希函数 哈希冲突1. 闭散列代码实现 2. 开散列拉链法的优点 针对开散列哈希的扩展基于开散列拉链法封装哈希表MyHash.h 基于哈希表实现unordered_map类Myunordered_map.h 基于哈希表实现unordered_set类Myunordered_map.h 哈希表的概…

匠心独运的掺Si量子势垒策略,显著提升了AlGaN基深紫外LED出光率

WHU团队凭借匠心独运的三明治式掺Si量子势垒策略,显著提升了AlGaN基深紫外光LED的效率,这一创新成果为中国武汉大学的研究团队所取得。他们巧妙地设计出一种三明治状Si掺杂(未掺杂)方案,应用于Al0.6Ga0.4N量子势垒中&a…

WSL安装CentOS系统

1.首选找一个linux系统,执行docker命令 docker run -it --rm centos:7 bash 2.开一个新窗口,将系统导出 docker export e0ee25406703 -o centos.tar 3.切换到wsl命令,导入tar包 wsl --import centos D:\wsl\centos D:\wsl\centos.tar cen…

llvm实践日志(1)---安装llvm

参考了官方教程:Getting Started with the LLVM System — LLVM 19.0.0git documentation 首先从github拷贝一份源码,使用了官方推荐的方法: git clone --depth 1 https://github.com/llvm/llvm-project.git 我的系统是ubuntu22&#xff0…

人工智能安全方面存在哪些问题

人工智能的安全方面存在多个问题,这些问题可以归纳为以下几个方面: 一、网络安全问题 数据泄露风险:人工智能系统依赖于大量数据进行学习和推理,这些数据可能包含敏感信息,如用户隐私、商业机密等。如果系统存在安全…

Java面试题: 解释一下Java中的Happens-Before规则。

Java中的Happens-Before规则是Java内存模型(Java Memory Model, JMM)的核心概念之一,它定义了多线程环境中操作之间的内存可见性关系。这些规则确保了在并发执行的线程之间,对共享数据的访问能够保持正确的顺序和可见性。 Happen…

3. CSS的色彩与背景

3.1 CSS3中的色彩 CSS3扩展了颜色的定义方式,使得开发者能够使用更多样化和灵活的颜色表达方式。这包括RGB、RGBA、HSL、HSLA等格式,以及支持透明度和渐变的特性。 3.1.1 颜色格式 十六进制颜色 十六进制颜色是最常用的颜色表示法,以#开头…

queue学习

std::queue 类是一种容器适配器,它提供队列的功能——尤其是 FIFO(先进先出)数据结构。此类模板用处为底层容器的包装器——只提供特定的函数集合。queue 在底层容器尾端推入元素,从首端弹出元素。 元素访问 front 访问第一个元素…

20240526每日后端---------分享一些开发必备网站

代码开发工具: https://www.matools.com/ 前端开发网站: https://ui.bqrdh.com/#google_vignette 后端开发网站: https://javaguide.cn/ 设计模式分析: https://refactoringguru.cn/design-patterns/catalog

Elastic Cloud 将 Elasticsearch 向量数据库优化配置文件添加到 Microsoft Azure

作者:来自 Elastic Serena Chou, Jeff Vestal, Yuvraj Gupta 今天,我们很高兴地宣布,我们的 Elastic Cloud Vector Search 优化硬件配置文件现已可供 Elastic Cloud on Microsoft Azure 用户使用。 此硬件配置文件针对使用 Elasticsearch 作…

web如何做接口层面自动化测试?

接口层面约等于集成化测试,且需要启动web容器 一般web项目的,代码都是按照分层开发的,业务主要是集中在service和dao层,而我们如果仅仅是利用之前的单元测试,然后把依赖的代码直接mock掉,仅仅测试controller这一块是没…

国内github镜像站点

以下几个国内的GitHub镜像站点来提高访问速度: 1. kgithub.com:您可以将GitHub源网址前面加k来使用,例如将https://github.com/username/repo.git改为https://kgithub.com/username/repo.git。这个镜像站点允许查看代码、Issue和评论&#x…

ICP算法的具体计算流程

ICP算法的具体计算流程 初始对齐: 输入:两组点云,源点云和目标点云。初始化:选择一个初始的对齐变换,通常是单位矩阵(表示没有初始变换)。 迭代过程: 步骤1:最近点查找&a…

数据库SQL语言实战(十)(最后一篇)

目录 前言 练习题 实验八 实验九 题目一 题目二 总结 前言 本篇练习题的重点有两个: 一、测试提交commit和回滚rollback的作用,了解锁等待、授权等知识。 二、学会复制表结构、学会插入数据,特别是学会如何避免重复插入,也就是如何避…

ASP.NET MVC 快速入门(图文版)

今年是2024年了,没有多少人在ASP.NET 去做开发,都使用ABP框架 ,不过我们仍然需要了解ASP.NET MVC 的一个开发流程 MVC概述 MVC是当前比较流行的WEB程序开发模式之一,ASP.NET MVC是.Net对MVC的一种实现。MVC(Model View…