一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python編程冒泡排序法實現動圖排序示例解析

python編程冒泡排序法實現動圖排序示例解析

2022-01-18 16:22Hann Yang Python

這篇文章主要介紹了python編程中如何使用冒泡排序法實現動圖排序的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

 

先上個冒泡排序的效果圖:

python編程冒泡排序法實現動圖排序示例解析

 是不是,有那么一點點像了? 其實要做這個動圖真不是很難,來看冒泡的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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操作

 

動態排序的完整代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
2
3
4
1.root = tk.Tk()   #Tkinter建立窗口
2.root.geometry('640x480')  #設置分辨率
3.root.title('Bubble Sort')  #設置窗口標題
4.root.resizable(False,False) #取消窗口大小變動
?
1
2
3
4
5
6
7
8
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
2
3
4
5
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
2
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冒泡排序動圖實現的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/boysoft2002/article/details/120319189

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 动漫白丝袜美女羞羞 | 三级黄色片在线观看 | 欧美三级小说 | 色噜噜视频影院 | 国产成人精品综合在线观看 | 色哟哟在线观看 | 91九色porn偷拍在线 | 色婷婷久久综合中文久久一本` | 国产欧美一区二区三区免费看 | 国产特级毛片aaaaaa | 欧美久在线观看在线观看 | 亚洲欧美一区二区三区在饯 | 50度灰破解版v5.7.0 | 日韩porn | 男人把大ji巴放进男人免费视频 | 日韩中文字幕视频在线观看 | 国产免费美女视频 | 欧美精品亚洲精品日韩专区va | 国产精品美女久久久久 | les在宿舍吃她奶 | 母乳在线播放 | 韩剧网3600热播剧 | xxxx意大利xxxxhd| 无人影院在线播放视频 | 国产精品久久久久久久久99热 | 无限资源在线观看高清 | 色444| 免费超级乱淫视频播放性 | 香蕉国产成版人视频在线观看 | 亚洲mm色国产网站 | 摸进老太婆的裤裆小说 | 女被男啪到哭 | 免费观看无遮挡www的小视频 | 激情婷婷成人亚洲综合 | 99视频精品国在线视频艾草 | 九九精品国产 | 国模大胆一区二区三区 | 精品国产三级av在线 | 国产欧美国产精品第一区 | 国产馆精品推荐在线观看 | 丁香六月色婷婷综合网 |