广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python编程冒泡排序法实现动图排序示例解析
  • 283
分享到

python编程冒泡排序法实现动图排序示例解析

2024-04-02 19:04:59 283人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录先上个冒泡排序的效果图:动态排序的原理python tkinter库canvas操作动态排序的完整代码部分代码注释先上个冒泡排序的效果图:  是不是,有那么一点点像了

先上个冒泡排序的效果图:

 是不是,有那么一点点像了? 其实要做这个动图真不是很难,来看冒泡的代码:


>>> def Bubble(List):
	L = len(List)-1
	for i in range(L):
		for j in range(L-i):
			if List[j]>List[j+1]:
				List[j],List[j+1]=List[j+1],List[j]
	return List
 
>>> lst = [randint(1,20) for _ in range(15)]
>>> lst
[1, 10, 4, 18, 3, 15, 8, 8, 20, 12, 14, 14, 20, 6, 19]
>>> Bubble(lst)
[1, 3, 4, 6, 8, 8, 10, 12, 14, 14, 15, 18, 19, 20, 20]

动态排序的原理

冒泡排序就是在循环中当List[j]>List[j+1]时不停交换元素,双循环结果排序即成。那么,在做动图时,除了交换元素,还要交换色块位置以及数字标注的值。用Python自带的tkinter库,写gui界面比较容易。添加一个画布canvas和两个按钮button然后用create_rectangle 和 create_text 画色块和文字标签;在冒泡排序的循环中添加交换它们位置的代码即可。另外,改变文本和填充颜色用itemconfig()函数,参数分别用 text和fill。

更多注释见第三部分;

python常用颜色表参见:Python编程tkinter库Canvas实现涂鸦颜色表及围棋盘示例

Python tkinter库Canvas操作

动态排序的完整代码


import tkinter as tk
from random import randint
from time import sleep
 
def init():
    global rect,font,pos,lst,step
    count = 20
    rect,font,pos = [0]*count,[0]*count,[]
    lst = [randint(1,20) for _ in range(count)]
    x,y = 45,330
    width,step = 15,28
    cv.delete('all')
    for i in range(count):
        pos.append((x+i*step,y-lst[i]*width,x+i*step+width,y))
        sleep(0.1)
        rect[i] = cv.create_rectangle(pos[i], fill='royalblue')
        font[i] = cv.create_text(x+i*step+7,y+10,text=str(lst[i]),anchor=tk.CENTER)
        cv.update()
    btn2.configure(state=tk.NORMAL)
    btn1.configure(state=tk.DISABLED) 
def bubble():
    global cv,rect,font,pos,lst,step
    L = len(lst)-1
    btn2.configure(state=tk.DISABLED)
    for i in range(L):
        for j in range(L-i):
            if lst[j]>lst[j+1]:
                lst[j],lst[j+1] = lst[j+1],lst[j]
                cv.move(rect[j],step,0)
                cv.move(rect[j+1],-step,0)
                rect[j],rect[j+1]=rect[j+1],rect[j]
                cv.itemconfig(font[j],text = str(lst[j]),fill='red')
                cv.itemconfig(font[j+1],text = str(lst[j+1]),fill='red')
                cv.itemconfig(rect[j],fill='orangered')
                cv.itemconfig(rect[j+1],fill='orangered')
                cv.update()
                sleep(0.4)
                cv.itemconfig(font[j],fill='black')
                cv.itemconfig(font[j+1],fill='black')
                cv.itemconfig(rect[j],fill='royalblue')
                cv.itemconfig(rect[j+1],fill='royalblue')
                cv.update()
    btn1.configure(state=tk.NORMAL)
def main():
    global cv,btn1,btn2
    root = tk.Tk()
    root.geometry('640x480')
    root.title('Bubble Sort')
    root.resizable(False,False)
    cv = tk.Canvas(root, width=640, height=380, bg='aliceblue')
    cv.pack()
    btn1 = tk.Button(root,text='Create',command=init)
    btn1.place(x=240,y=420)
    btn2 = tk.Button(root,text='Bubble',command=bubble,state=tk.DISABLED)
    btn2.place(x=320,y=420)
    root.mainloop() 
if __name__=="__main__":
 
    app = main()
    

部分代码注释

给初次接触 tkinter 控件的新同学给点代码注释,大佬们略过:


1.root = tk.Tk()   #Tkinter建立窗口 
2.root.geometry('640x480')  #设置分辨率
3.root.title('Bubble Sort')  #设置窗口标题
4.root.resizable(False,False) #取消窗口大小变动

1.cv = tk.Canvas(root, width=640, height=380, bg='aliceblue')  #创建画面
2.cv.pack()  # 控件布局方式: .pack自动填充空间 .place指定位置 
3.btn1 = tk.Button(root,text='Create',command=init)  #创建按钮
4.btn1.place(x=240,y=420)  # place() 指定控件横纵坐标x,y
5.btn2 = tk.Button(root,text='Bubble',command=bubble,state=tk.DISABLED)
6.btn2.place(x=320,y=420)
7.# Canvas(): width height = 宽、高 bg=背景填充色
8.# Button():  text=按钮标题,command=绑定函数,state=按钮状态

1.rect[i] = cv.create_rectangle(pos[i], fill='royalblue')  #在画布上创建矩形
2.font[i] = cv.create_text(x+i*step+7,y+10,text=str(lst[i]),anchor=tk.CENTER)
3.# create_text 参数: X,Y坐标 ,text 文字, anchor=tk.CENTER 居中 
4.btn2.configure(state=tk.NORMAL)  #恢复btn2按钮可点击状态
5.btn1.configure(state=tk.DISABLED) #设置btn2不可点击

1.cv.move(rect[j+1],X,Y) #画布子控件相对位置移动, X,Y正数向右或下,负数反向
2.cv.itemconfig(font[j],text = str(lst[j]),fill='red') #画布子控件的参数设置文字颜色等

如果你想要其它功能,就可以考虑增加滑块钮联动count变量来改变初始化时色块的数量,或者增加速度变量改变色块交换的速度等等。常见排序有十种,基本上制作动图的原理是一样的,只要知道排序的代码就能做,开动起来自己动手去制作吧!

---All done!

以上就是python编程冒泡排序法实现动图排序示例解析的详细内容,更多关于python冒泡排序动图实现的资料请关注编程网其它相关文章!

--结束END--

本文标题: python编程冒泡排序法实现动图排序示例解析

本文链接: https://www.lsjlt.com/news/137336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python编程冒泡排序法实现动图排序示例解析
    目录先上个冒泡排序的效果图:动态排序的原理Python tkinter库Canvas操作动态排序的完整代码部分代码注释先上个冒泡排序的效果图:  是不是,有那么一点点像了...
    99+
    2022-11-12
  • Python实现冒泡排序算法的示例解析
    目录1. 算法描述2. 算法分析3. 动图展示4. 代码实现5. 算法升级6. 时间复杂度分析1. 算法描述 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排...
    99+
    2022-11-11
  • TypeScript实现十大排序算法之冒泡排序示例详解
    目录一. 冒泡排序的定义二. 冒泡排序的流程三. 冒泡排序的图解四. 冒泡排序的代码五. 冒泡排序的时间复杂度六. 冒泡排序的总结一. 冒泡排序的定义 冒泡排序是一种简单的排序方法...
    99+
    2023-02-23
    TypeScript冒泡排序算法 TypeScript 算法
  • 图文详解Python冒泡排序算法
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于冒泡排序的相关问题,包括了算法描述、分析、代码实现等等内容,下面一起来看一下,希望对大家有帮助。冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数...
    99+
    2022-06-14
    python
  • Java实现冒泡排序示例介绍
    何为冒泡排序 冒泡:就像气泡从水中冒出来一样 在冒泡排序中,最小数或最大数取决于您是按升序还是降序对数组进行排序,向上冒泡到数组的开头或结尾。 算法描述: 比较相邻的元素。如果第一个...
    99+
    2023-05-18
    Java冒泡排序 Java冒泡排序算法
  • C语言实现冒泡排序算法的示例详解
    目录1. 问题描述2. 问题分析3. 算法设计动图演示4. 程序设计设计一设计二结论5. 流程框架6. 代码实现7. 问题拓展1. 问题描述 对N个整数(数据由键盘输入)进行升序排列...
    99+
    2022-11-13
  • Python冒泡排序算法怎么实现
    今天小编给大家分享一下Python冒泡排序算法怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 算法描述冒泡排序(...
    99+
    2023-07-02
  • Python冒泡排序注意要点实例详解
    冒泡排序注意三点: 1. 第一层循环可不用循环所有元素。 2.两层循环变量与第一层的循环变量相关联。 3.第二层循环,最终必须循环集合内所有元素。 示例代码一: 1.第一层循环,只循环n-1个元素。 2....
    99+
    2022-06-04
    详解 要点 实例
  • C语言实现交换排序算法(冒泡,快速排序)的示例代码
    目录前言一、冒泡排序1.基本思想2.优化3.扩展二、快速排序1.基本思想2.优化3.代码前言 查找和排序是数据结构与算法中不可或缺的一环,是前辈们在算法道路上留下的重要且方便的一些技...
    99+
    2022-11-13
  • 怎么使用Python实现冒泡排序算法
    这篇文章主要介绍“怎么使用Python实现冒泡排序算法”,在日常操作中,相信很多人在怎么使用Python实现冒泡排序算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python实现冒泡排序算法”的疑...
    99+
    2023-07-02
  • 图解Java经典算法冒泡排序的原理与实现
    目录冒泡排序算法原理动图演示算法练习算法分析冒泡排序 冒泡排序是一种比较简单的排序算法,我们可以重复遍历要排序的序列,每次比较两个元素,如果他们顺序错误就交换位置,重复遍历到没有可以...
    99+
    2022-11-13
  • 详解Python排序算法的实现(冒泡,选择,插入,快速)
    目录1. 前言2. 冒泡排序算法2.1 摆擂台法2.2 相邻两个数字相比较3. 选择排序算法4. 插入排序5. 快速排序6. 总结1. 前言 所谓排序,就是把一个数据群体按个体数据的...
    99+
    2022-11-10
  • Python编程实现超炫动态排序图
    目录用 python 制作超燃动态排序视频1,数据预处理2,图表绘制3,制作的图表转化为视频、动画用 python 制作超燃动态排序视频 在开始之前,先贴张图,之前网上一段时间下面这...
    99+
    2022-11-12
  • C++ qsort函数排序与冒泡模拟实现流程详解
    目录一、qsort排序函数1、函数功能特点2、函数参数3、比较函数4、测试qsort排序(1)测试qsort函数排序整形(2)测试qsort函数排序结构体二、冒泡模拟qusort函数...
    99+
    2022-11-13
    C++ qsort函数排序 C++冒泡排序
  • C语言qsort函数用冒泡排序实现过程详解
    目录前言1.冒泡排序的实现1.1冒泡排序的概念1.2具体代码的实现2.qsort函数3.qsort函数的实现前言 这篇文章就是指针进阶的收尾环节了,相信看过C语言进阶—&...
    99+
    2023-02-14
    C语言qsort函数 C语言冒泡排序实现qsort函数
  • C++编程归并排序算法实现示例
    归并算法开始首先要对一段要有序的数字进行排序 void merg_sort(int* a, int fbegin, int fend, int sbegin, int send,...
    99+
    2022-11-12
  • C语言实现各种排序算法实例代码(选择,冒泡,插入,归并,希尔,快排,堆排序,计数)
    目录前言 选择排序 冒泡排序 插入排序 归并排序 希尔排序 快速排序 堆排序 计数排序 总结前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法...
    99+
    2022-11-12
  • pythonmanim实现排序算法动画示例
    目录什么是 manim冒泡排序介绍算法步骤初始化元素代码说明元素交换动画实现代码什么是 manim Manim 是一个用于精确编程动画的引擎,专为创建解释性数学视频而设计。 注意,有...
    99+
    2022-11-11
  • TypeScript十大排序算法插入排序实现示例详解
    目录一. 插入排序的定义二. 插入排序的流程三. 插入排序的图解四. 插入排序的代码五. 插入排序的时间复杂度六. 插入排序的总结一. 插入排序的定义 插入排序就像是你打扑克牌,你...
    99+
    2023-02-23
    TypeScript插入排序算法 TypeScript 算法
  • Python实现快速排序和插入排序算法及自定义排序的示例
    一、快速排序 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据...
    99+
    2022-06-04
    自定义 示例 算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作