python3冒泡排序动态演示_作者:李兴球

 

"""用python3的海龟画图模块制作的动态演示冒泡排序算法,作者:李兴球"""

from turtle import *
from random import randint
from time import sleep

class Column(Turtle):
    def __init__(self,x):
        Turtle.__init__(self,shape='square')
        """形状square的初始大小为20x20,所以半高就是10"""        
        self.up()                         #抬笔
        r = randint(0,255)
        g = randint(0,255)
        b = randint(0,255)        
        self.fillcolor(r,g,b)
        self.scale = randint(1,38)        # 20 * self.scale 为柱子高度
        self.setx(x)
        self.__half__ = self.screen.window_height()//2 #屏幕的半高
        self.shapesize(self.scale,1)                   #相对于自身坐标系前进的垂直方向放大
        """10*self.scale是柱子的半高,往下移屏幕半高,再抬高自身高一半加30,让所有柱子和屏幕底边对齐"""
        self.sety(0- self.__half__ + 10*self.scale  + 30)  
        

if __name__=="__main__":

    width,height=800,800
    screen = Screen()
    screen.colormode(255)
    screen.setup(width,height)
    screen.title("冒泡排序动态演示,作者:李兴球 2018/10/1")
    screen.delay(0)

    xcors = [x for x in range(40-width//2,width//2-20,40) ]
    columns = [Column(x) for x in xcors ] #生成所有柱子
    length = len(columns)
    while True:
        
        排序了吗 = False                  #描述是否交换了数据的标志
        for i in range(0,length-1 ):      #由于越往后,越不要排这么多次数了.
            c1 = columns[i]               #代表前面柱子
            c2 = columns[i + 1]           #代表后面柱子
            
            if c1.scale > c2.scale:       #如果前面的柱子更高,则交换位置

                x1 = c1.xcor()             #保留前面柱子c1的x坐标
                x2 = c2.xcor()             #保留后面柱子c2的x坐标
                
                columns[i] = c2            #让前面的柱子赋值为后面柱子        
                columns[i+1] = c1          #让后面的柱子赋值为前面柱子
                
                columns[i].setx(x1)   #交换列表中项目后,重新设置x坐标
                columns[i+1].setx(x2) #交换列表中项目后,重新设置x坐标
                
                排序了吗 = True
            screen.update()
            sleep(0.1)
            
        length = length - 1               
        if  排序了吗 == False:break       #如果一次都没有排序,则退出while循环
        
         
        
                
            
            
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李兴球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值