欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python編程冒泡排序法實(shí)現(xiàn)動(dòng)圖排序示例解析

 更新時(shí)間:2021年10月03日 09:56:45   作者:Hann Yang  
這篇文章主要介紹了python編程中如何使用冒泡排序法實(shí)現(xiàn)動(dòng)圖排序的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

先上個(gè)冒泡排序的效果圖:

 是不是,有那么一點(diǎn)點(diǎn)像了? 其實(shí)要做這個(gè)動(dòng)圖真不是很難,來(lái)看冒泡的代碼:

>>> 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]

動(dòng)態(tài)排序的原理

冒泡排序就是在循環(huán)中當(dāng)List[j]>List[j+1]時(shí)不停交換元素,雙循環(huán)結(jié)果排序即成。那么,在做動(dòng)圖時(shí),除了交換元素,還要交換色塊位置以及數(shù)字標(biāo)注的值。用python自帶的tkinter庫(kù),寫gui界面比較容易。添加一個(gè)畫布canvas和兩個(gè)按鈕button然后用create_rectangle 和 create_text 畫色塊和文字標(biāo)簽;在冒泡排序的循環(huán)中添加交換它們位置的代碼即可。另外,改變文本和填充顏色用itemconfig()函數(shù),參數(shù)分別用 text和fill。

更多注釋見第三部分;

python常用顏色表參見:Python編程tkinter庫(kù)Canvas實(shí)現(xiàn)涂鴉顏色表及圍棋盤示例

Python tkinter庫(kù)Canvas操作

動(dòng)態(tài)排序的完整代碼

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 控件的新同學(xué)給點(diǎn)代碼注釋,大佬們略過:

1.root = tk.Tk()   #Tkinter建立窗口 
2.root.geometry('640x480')  #設(shè)置分辨率
3.root.title('Bubble Sort')  #設(shè)置窗口標(biāo)題
4.root.resizable(False,False) #取消窗口大小變動(dòng)
1.cv = tk.Canvas(root, width=640, height=380, bg='aliceblue')  #創(chuàng)建畫面
2.cv.pack()  # 控件布局方式: .pack自動(dòng)填充空間 .place指定位置 
3.btn1 = tk.Button(root,text='Create',command=init)  #創(chuàng)建按鈕
4.btn1.place(x=240,y=420)  # place() 指定控件橫縱坐標(biāo)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=按鈕標(biāo)題,command=綁定函數(shù),state=按鈕狀態(tài)
1.rect[i] = cv.create_rectangle(pos[i], fill='royalblue')  #在畫布上創(chuàng)建矩形
2.font[i] = cv.create_text(x+i*step+7,y+10,text=str(lst[i]),anchor=tk.CENTER)
3.# create_text 參數(shù): X,Y坐標(biāo) ,text 文字, anchor=tk.CENTER 居中 
4.btn2.configure(state=tk.NORMAL)  #恢復(fù)btn2按鈕可點(diǎn)擊狀態(tài)
5.btn1.configure(state=tk.DISABLED) #設(shè)置btn2不可點(diǎn)擊
1.cv.move(rect[j+1],X,Y) #畫布子控件相對(duì)位置移動(dòng), X,Y正數(shù)向右或下,負(fù)數(shù)反向
2.cv.itemconfig(font[j],text = str(lst[j]),fill='red') #畫布子控件的參數(shù)設(shè)置文字顏色等

如果你想要其它功能,就可以考慮增加滑塊鈕聯(lián)動(dòng)count變量來(lái)改變初始化時(shí)色塊的數(shù)量,或者增加速度變量改變色塊交換的速度等等。常見排序有十種,基本上制作動(dòng)圖的原理是一樣的,只要知道排序的代碼就能做,開動(dòng)起來(lái)自己動(dòng)手去制作吧!

---All done!

以上就是python編程冒泡排序法實(shí)現(xiàn)動(dòng)圖排序示例解析的詳細(xì)內(nèi)容,更多關(guān)于python冒泡排序動(dòng)圖實(shí)現(xiàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談python 調(diào)用open()打開文件時(shí)路徑出錯(cuò)的原因

    淺談python 調(diào)用open()打開文件時(shí)路徑出錯(cuò)的原因

    這篇文章主要介紹了淺談python 調(diào)用open()打開文件時(shí)路徑出錯(cuò)的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-06-06
  • python常見字符串處理函數(shù)與用法匯總

    python常見字符串處理函數(shù)與用法匯總

    這篇文章主要介紹了python常見字符串處理函數(shù)與用法,結(jié)合實(shí)例形式詳細(xì)分析了Python字符串操作函數(shù)find、join、replace及split功能、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法

    Python實(shí)現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法,涉及Python針對(duì)Excel文件的數(shù)據(jù)處理及讀寫相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python?設(shè)計(jì)模式行為型解釋器模式

    Python?設(shè)計(jì)模式行為型解釋器模式

    本文介紹了Python解釋器模式,解釋器模式即Interpreter?Pattern,給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子,下面文章進(jìn)入更深層學(xué)習(xí),需要的小伙伴可以參考一下
    2022-02-02
  • Python xmltodict模塊安裝及代碼實(shí)例

    Python xmltodict模塊安裝及代碼實(shí)例

    這篇文章主要介紹了Python xmltodict模塊安裝及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python實(shí)現(xiàn)的生產(chǎn)者、消費(fèi)者問題完整實(shí)例

    Python實(shí)現(xiàn)的生產(chǎn)者、消費(fèi)者問題完整實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)的生產(chǎn)者、消費(fèi)者問題,簡(jiǎn)單描述了生產(chǎn)者、消費(fèi)者問題的概念、原理,并結(jié)合完整實(shí)例形式分析了Python實(shí)現(xiàn)生產(chǎn)者、消費(fèi)者問題的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù))

    Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù))

    這篇文章主要介紹了Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù)),本文介紹了Manager的dict、list使用例子,同時(shí)介紹了namespace對(duì)象,需要的朋友可以參考下
    2014-11-11
  • Python中實(shí)現(xiàn)定時(shí)任務(wù)詳解

    Python中實(shí)現(xiàn)定時(shí)任務(wù)詳解

    這篇文章主要介紹了Python中實(shí)現(xiàn)定時(shí)任務(wù)詳解的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Python爬蟲部分開篇概念講解

    Python爬蟲部分開篇概念講解

    在學(xué)習(xí)Python爬蟲部分,需要已經(jīng)學(xué)過Python基礎(chǔ)和前端的相關(guān)知識(shí),本文對(duì)python爬蟲概念及原理給大家詳細(xì)介紹,需要的朋友跟隨小編一起看看吧
    2021-04-04
  • Python中的pathlib.Path為什么不繼承str詳解

    Python中的pathlib.Path為什么不繼承str詳解

    這篇文章主要給大家介紹了關(guān)于Python中pathlib.Path為什么不繼承str的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論