python编程冒泡排序法怎样实现动图排序
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,python编程冒泡排序法怎样实现动图排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先上个冒泡排序的效果图:是不是,有那么一点点
千家信息网最后更新 2025年02月04日python编程冒泡排序法怎样实现动图排序
python编程冒泡排序法怎样实现动图排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
先上个冒泡排序的效果图:
是不是,有那么一点点像了? 其实要做这个动图真不是很难,来看冒泡的代码:
>>> 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 tkfrom random import randintfrom 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,y5.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变量来改变初始化时色块的数量,或者增加速度变量改变色块交换的速度等等。常见排序有十种,基本上制作动图的原理是一样的,只要知道排序的代码就能做,开动起来自己动手去制作吧!
关于python编程冒泡排序法怎样实现动图排序问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
排序
代码
按钮
控件
位置
画布
色块
颜色
编程
参数
文字
更多
注释
问题
元素
函数
动态
原理
变量
标题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术公司公司章程
腾讯网络技术运营面试题
吃鸡游戏如何更改服务器
机场信息网络技术岗
江苏直销软件开发项目
网络安全oem代工厂
戴尔网络安全rsa
idea生产数据库配置
广东省高考评卷老师数据库
每一个人都是网络安全的守护者
软件开发人员人工费 万元
招银网络技术面试笔试题前端
db2 数据库 字符集
AA设备软件开发
广州商城软件开发费用是多少
软件实施要懂的网络技术
南京状态监测软件开发
抗击疫情移动数据库
个人与公司签的软件开发协议
网络安全认证的意义
数据库原理中数据仓库是指
昆明渗透靶场网络安全
网络安全与执法女生干什么工作
ado数据库DBF_BYT
服务器网卡槽
怎么查找论文的原始数据库
指尖江湖新人选择哪个服务器
计算机专业软件开发好学吗
pc怎么用服务器内存
上海挖数互联网科技有限公司招骋