可视化冒泡排序

概念

步骤

1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

原理

冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。

可视化图

在这里插入图片描述

代码

不可视化

import numpy as np
def Bubble_Sort(value):
    for i in range(len(value)-1):
        for j in range(len(value)-1):
            if value[j] > value[j+1]:
                value[j],value[j+1] = value[j+1],value[j]
    print('冒泡排序:',end = ' ')
    print(value)
 
 

if __name__ =='__main__':
    list =np.random.randint(200, size=10)
    print('随机列表:',end = '')
    print(list)
    Bubble_Sort(list)

可视化

import turtle
#导入turtle库
import time
#导入time库
import random
#导入random库
pen = turtle.Pen()
#使用pen代替turtle因为后面要设置turtle的画布会冲突所以用pen代替


def block(pen, higth):
#创建方法长方型导入数值长方形的高,和代替turtle的pen
    pen.fillcolor(random.random(), random.random(), random.random())
    #设置填充颜色(随即颜色
    pen.begin_fill()
    #开始启用画笔
    pen.left(90)
    #左转90度
    pen.forward(higth * 10)
	#前进higth * 10
    pen.write(higth)
    #写出数字
    pen.right(90)
    #右转90度
    pen.forward(50)
    #前进50像素
    pen.right(90)
    #右转90度
    pen.forward(higth * 10)
    #前进higth * 10
    pen.right(90)
    #右转90度
    pen.forward(50)
    #前进50像素
    pen.end_fill()
    # 抬笔
    pen.right(180)
    #右转180度



def bubble(li):
#创造方法冒泡排序,创造函数li(需整理的数组)
    for i in range(len(li) - 1):
    #重复执行的次数为li中数字的-1
        for j in range(len(li) - 1 - i):
        #li-1去做比较-i的意义(减少排序好的元素)
            pen[j].showturtle()
            #现实图形
            pen[j + 1].showturtle()
            #显示下面一个图形
            time.sleep(2)
            #休眠两妙
            pen[j].hideturtle()
            #隐藏画笔
            pen[j + 1].hideturtle()
            #隐藏相印图形

            if li[j] > li[j + 1]:
            #如果前面的大于后面的
                temp = li[j]
                #改变数组
                li[j] = li[j + 1]
                #审核前面的大于后面的
                li[j + 1] = temp
                #把这这个设置为数组
                pen[j].clear()
                #移到前面那个图形
                pen[j + 1].clear()
                #移到前面那个图形
                block(pen[j], li[j])
                #执行block
                block(pen[j + 1], li[j + 1])
                #执行block


li = [5, 2, 3, 7, 9, 1, 6]
#li(需整理的数组)
pen = list()
#设置pen代替turtle
n = 0
#设为0
for i in li:
#重复执行数组
    n += 1
    #n+1
    tem = turtle.Turtle()
    #设置背景
    pen.append(tem)
    #背景为默认
    tem.hideturtle()
    #隐藏画笔
    tem.penup()
    #抬笔
    tem.goto(50 * n, 0)
    #移动到合适的地点

for i in range(len(li)):
#重复执行数组
    block(pen[i], li[i])
    #执行block

bubble(li)
#执行bubble调用函数li

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值