应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

5种python方法实现冒泡排序可视化BubbleSortV

  1说明:
  1。1冒泡排序:
  1。1。1原理:比较两个相邻的元素,将值大的元素交换至右端。
  1。1。2来源:由来是因为越大的元素会经由交换慢慢浮到数列的顶端,故得名。
  1。1。3是一种最简单直观的排序算法之一。
  1。2冒泡排序可视化:
  1。2。1BubbleSortVisualizer。
  1。2。2更能直观了解这种排序。
  1。2。3通过多种方法实现,理解该算法,同时复习python。
  1。2。4python法,采用:matplotlib法、pygame法、turtle法(2d3d)、opencv法。
  1。2。5代码来源网络,来源已注明,仅供学习,感谢网友,适合收藏。
  具体代码和讲解
  2python法:
  2。1matplotlib法
  2。1。1效果图:
  2。1。2代码来源:https:blog。csdn。netm1090760001articledetails103217052
  2。1。3代码一:frommatplotlibimportpyplotaspltimportrandomLISTSIZE1010个组barPAUSETIME4LISTSIZE冒泡算法defbubblesort(nums):foriinrange(len(nums)1):forjinrange(len(nums)i1):ifnums〔j〕nums〔j1〕:nums〔j〕,nums〔j1〕nums〔j1〕,nums〔j〕plt。cla()清除内容plt。bar(range(len(nums)),nums,aligncenter)plt。bar(j,nums〔j〕,colorr,aligncenter)plt。bar(j1,nums〔j1〕,colorr,aligncenter)plt。pause(PAUSETIME)plt。show()ifnamemain:nums〔〕foriinrange(LISTSIZE):nums。append(random。randint(0,1000))随机生成bubblesort(nums)print(nums)
  2。2turtle法:
  2。2。12dturtle法:
  2。2。1。1来源:https:blog。csdn。netavskyaarticledetails82958907
  2。2。1。2效果图:
  2。2。1。3代码二:fromturtleimportfromrandomimportrandintfromtimeimportsleepclassColumn(Turtle):definit(self,x):Turtle。init(self,shapesquare)self。up()抬笔rrandint(0,255)grandint(0,255)brandint(0,255)self。fillcolor(r,g,b)self。scalerandint(1,38)20self。scale为柱子高度self。setx(x)self。halfself。screen。windowheight()2屏幕的半高self。shapesize(self。scale,1)相对于自身坐标系前进的垂直方向放大self。sety(0self。half10self。scale30)ifnamemain:width,height800,800screenScreen()screen。colormode(255)screen。setup(width,height)screen。title(冒泡排序动态演示)screen。delay(0)xcors〔xforxinrange(40width2,width220,40)〕columns〔Column(x)forxinxcors〕生成所有柱子lengthlen(columns)whileTrue:FlagFalse描述是否交换了数据的标志foriinrange(0,length1):由于越往后,越不要排这么多次数了。c1columns〔i〕代表前面柱子c2columns〔i1〕代表后面柱子ifc1。scalec2。scale:如果前面的柱子更高,则交换位置x1c1。xcor()保留前面柱子c1的x坐标x2c2。xcor()保留后面柱子c2的x坐标columns〔i〕c2让前面的柱子赋值为后面柱子columns〔i1〕c1让后面的柱子赋值为前面柱子columns〔i〕。setx(x1)交换列表中项目后,重新设置x坐标columns〔i1〕。setx(x2)交换列表中项目后,重新设置x坐标FlagTruescreen。update()sleep(0。1)lengthlength1ifFlagFalse:break如果一次都没有排序,则退出while循环
  2。2。23dturtle法:
  2。2。2。1来源:https:blog。csdn。netmagicdoubiarticledetails88843825
  2。2。2。2效果图:
  2。2。2。3代码三:fromturtleimportfromrandomimportimporttimedefbubblesort(rectanglelist):forpassnuminrange(0,101):foriinrange(0,10passnum1,1):ifrectanglelist〔i〕。numrectanglelist〔i1〕。num:rectanglelist〔i〕。replace(rectanglelist〔i1〕)time。sleep(0。5)休眠1秒classCube():definit(self,x,y,num,leng10):self。xxself。yyself。numnumself。sidelenlengself。createcube()defcreateside(self):fillcolor(639CD3)beginfill()left(170)forward(self。sidelen)right(80)forward(20self。num)right(100)forward(self。sidelen)right(80)forward(20self。num)endfill()setheading(0)恢复向右默认defcreatetop(self):fillcolor(95CEFF)penup()goto(self。x,self。y20self。num)pendown()beginfill()forward(20)left(170)forward(self。sidelen)left(10)forward(20)left(170)forward(self。sidelen)endfill()setheading(0)恢复向右默认defcreaterectangle(self):color(639CD3)penup()goto(self。x,self。y)pendown()柱的正面颜色fillcolor(green)beginfill()forxinrange(1,5):ifx21:n20else:n20self。numforward(n)left(90)endfill()defcreatecube(self):tracer(False)self。createrectangle()self。createside()self。createtop()tracer(True)deferaserectangle(self):setheading(0)color(white)penup()goto(self。x,self。y)pendown()fillcolor(white)beginfill()forxinrange(1,5):ifx21:n20else:n20self。numforward(n)left(90)endfill()deferaseside(self):fillcolor(white)beginfill()left(170)forward(self。sidelen)right(80)forward(20self。num)right(100)forward(self。sidelen)right(80)forward(20self。num)endfill()setheading(0)恢复向右默认deferasetop(self):fillcolor(white)penup()goto(self。x,self。y20self。num)pendown()beginfill()forward(20)left(170)forward(self。sidelen)left(10)forward(20)left(170)forward(self。sidelen)endfill()setheading(0)恢复向右默认deferasecube(self):tracer(False)self。eraserectangle()self。eraseside()self。erasetop()tracer(True)defreplace(self,n):self。erasecube()n。erasecube()self。num,n。numn。num,self。numself。createcube()n。createcube()ifnamemain:hideturtle()varlist()foriinrange(0,10):var。append(Cube(35i,0,randint(1,10)))bubblesort(var)done()
  2。3opencv法:
  2。3。1来源:https:blog。csdn。netu011983560articledetails106195385
  2。3。2效果图:
  2。3。3代码四:importnumpyasnpimportosimportcv2classDataseq():WHITE(255,255,255)RED(0,0,255)BLACK(0,0,0)YELLOW(0,127,255)definit(self,dataNone,sorttypefigure):self。sorttypesorttypeself。interval400原来是5,太小了注意与data数据最大值和最小值也有关系,与跳跃时间也有关self。inter2ifdataNone:print(therearenodatatosort!!!)os。exit()else:self。datadataself。maxdmax(self。data)最大值self。mindmin(self。data)最小值self。getfigure()self。Visualize()self。sortdata()defgetfigure(self):datanumlen(self。data)maxdmax(self。data)mindmin(self。data)self。figurenp。full((500(maxdmind)50,(datanum)(self。intervalself。inter),3),255,dtypenp。uint8)foriinrange(len(self。data)):self。figure〔50(self。data〔i〕mind)500:,(i)(self。intervalself。inter):(i)(self。intervalself。inter)self。interval〕self。YELLOWdefchoice(self,i,j):mindself。mindself。figure〔50(self。data〔i〕mind)500:,(i)(self。intervalself。inter):(i)(self。intervalself。inter)self。interval〕self。BLACKself。figure〔50(self。data〔j〕mind)500:,(j)(self。intervalself。inter):(j)(self。intervalself。inter)self。interval〕self。BLACKself。Visualize()defchange(self,i,j):mindself。mindself。figure〔50(self。data〔i〕mind)500:,(i)(self。intervalself。inter):(i)(self。intervalself。inter)self。interval〕self。WHITEself。figure〔50(self。data〔j〕mind)500:,(j)(self。intervalself。inter):(j)(self。intervalself。inter)self。interval〕self。WHITEindataself。data〔i〕self。data〔i〕self。data〔j〕self。data〔j〕indataself。figure〔50(self。data〔i〕mind)500:,(i)(self。intervalself。inter):(i)(self。intervalself。inter)self。interval〕self。BLACKself。figure〔50(self。data〔j〕mind)500:,(j)(self。intervalself。inter):(j)(self。intervalself。inter)self。interval〕self。BLACKself。Visualize()defVisualize(self):figure1self。figurecv2。namedWindow(img,cv2。WINDOWNORMAL)cv2。imshow(img,figure1)cv2。waitKey(1000)defsortdata(self):fordiinrange(len(self。data)):fordjinrange(len(self。data)di1):self。choice(dj,dj1)ifself。data〔dj〕self。data〔dj1〕:self。change(dj,dj1)self。getfigure()datatDataseq(〔10,20,30,15,25,18〕,sort)datat。Visualize()cv2。destroyAllWindows()
  2。4pygame法:
  2。4。1来源:https:github。comzetaleeeVisualizationalgorithm
  2。4。2效果图:
  2。4。3代码五:importpygamefromrandomimportrandintgap10竖条的间隔width30竖条的宽度screenSize(600,250)显示屏幕的尺寸barXPosition〔〕竖条在坐标轴的位置Bars〔〕竖条对象列表生成颜色classcolor(object):staticmethoddefRandomColor():r,g,brandint(0,225),randint(0,255),randint(0,255)return(r,g,b)staticmethoddefCalculateColor(self,num):passclassbar(object):definit(self,n,num,screen,width30):self。nnself。locationXbarXPosition〔n〕self。locationYscreenSize〔1〕50numself。numnumself。colorcolor。RandomColor()self。widthwidthself。fontpygame。font。Font(None,20)self。screenscreen绘制竖条及其上方的数字defBarDraw(self):pygame。draw。rect(self。screen,self。color,((self。locationX,self。locationY),(self。width,self。num)))self。txtself。font。render({}。format(self。num),True,self。color)self。screen。blit(self。txt,(self。locationX5,self。locationY20))移动竖条,flag是用于判断移动方向True向右False向左defmove(self,flag):pace2移动的步长消除移动前的竖条pygame。draw。rect(self。screen,(255,255,235),((self。locationX,self。locationY),(self。width,self。num)))ifflag:self。locationXpaceelse:self。locationXpace绘制移动后的竖条pygame。draw。rect(self。screen,self。color,((self。locationX,self。locationY),(self。width,self。num)))交换相邻两个竖条defChangeLocation(self,otherBall):清除当前位置图像与文字pygame。draw。rect(self。screen,(255,255,235),((self。locationX,self。locationY20),(self。width,self。num20)))pygame。draw。rect(otherBall。screen,(255,255,235),((otherBall。locationX,otherBall。locationY20),(otherBall。width,otherBall。num20)))竖条移动的动画forninrange(20):self。move(True)otherBall。move(False)pygame。time。delay(40)pygame。display。flip()移动后,重新写上竖条对应的数字self。screen。blit(self。txt,(self。locationX5,self。locationY20))otherBall。screen。blit(otherBall。txt,(otherBall。locationX5,otherBall。locationY20))交换竖条对象在列表的位置,同时交换排位数字Bars〔self。n〕,Bars〔otherBall。n〕Bars〔otherBall。n〕,Bars〔self。n〕self。n,otherBall。notherBall。n,self。npygame。display。flip()pygame。time。delay(200)此延时控制排序动画的快慢冒泡排序defalgorithm(nums):foriinrange(len(nums)1):forjinrange(len(nums)1i):ifnums〔j〕nums〔j1〕:Bars〔j〕。ChangeLocation(Bars〔j1〕)nums〔j〕,nums〔j1〕nums〔j1〕,nums〔j〕计算十二个竖条在轴上的位置defbarX(gap,width,barXs):forninrange(12):barX50gap(gapwidth)nbarXs。append(barX)defmain():nums〔〕pygame。init()screenpygame。display。setmode(screenSize)pygame。display。setcaption(算法)标题screen。fill((255,255,235))背景色barX(gap,width,barXPosition)计算bar位置并存于barXspygame。draw。aaline(screen,(0,255,0),(50,screenSize〔1〕50),(screenSize〔0〕50,screenSize〔1〕50))绘制坐标轴pygame。display。flip()生成十二个竖条并绘制forninrange(12):numrandint(20,160)tempBarbar(n,num,screen)tempBar。BarDraw()nums。append(num)Bars。append(tempBar)pygame。time。delay(50)此处延时是为了开始时演示动画效果pygame。display。flip()algorithm(nums)排序等待关闭窗口事件runTruewhilerun:foreventinpygame。event。get():ifevent。typepygame。QUIT:runFalseifnamemain:main()
  自己整理并分享出来
  喜欢的人,请点赞、关注、评论、转发和收藏。

双向奔赴的爱午餐过后,闲来无事,猛然想起在药店抓的中药还没有去拿回来。便抱着饭后百步走能活九十九的想法出门前往药店。10分钟左右,到达药店。在中药房的这一边,坐诊医生已经下班走人,走……爱吃你,却又怕你鱼的营养丰富,蛋白质多!人们口头常说:第一鱼,第二肉。鱼的吃法很多,我喜欢喝汤,常煲汤喝!煲鱼汤时,放点姜、白酒,煲出来的汤白得像牛奶,特别好喝!清蒸也不错!鱼汤比猪肉汤……我的月嫂生涯(十九)为什么小月龄的宝宝睡觉爱用劲、哼哼唧,有时会憋气、涨得小脸通红,有时双臂抖动,好像很痛苦,经常哼哼唧唧,睡觉被惊醒,这都是正常的生理状态。原因如下:1神经系统发育还不完善……哄孩子睡觉难吗?记往这个法则其实也不难最近小编刷到了好多个妈妈哄孩子睡觉耗时XX分的视频。视频中通常都是妈妈躺在床上装尸体,任孩子在身边大闹天宫都不喘气儿,直到娃儿电量耗尽之后自动关机。最短的是17分钟……刘烨与子女出行,儿子一如既往地帅气,女儿同样出色如今的娱乐圈中,聚光灯下关注可不仅仅是明星本人了,大众关注明星的工作之后的生活,关注明星们的个人家庭,而对于星二代,各大网友也是同样有兴趣。综艺《爸爸去哪儿》算是观众们认识众多……生平见过最蛮不讲理的男人,离婚后还要限制女方自由,他凭啥?我闺蜜小玲和她前夫前段时间再闹离婚,小玲说她可以啥也不要,就想要孩子。我说你别怕,姐们我是干啥的呀?不行咱们就跟他法庭见,小玲说她不想再和那家人再纠缠了,只要把孩子给她怎么都行……面对家里的ampampquot熊孩子ampampquot,家育儿指南针面对家中的熊孩子,一些家长总是感到非常的苦恼。这类孩子活泼好动,性格非常开朗,但总是会做出一些麻烦事,惹得父母非常生气,即使对其管教也是起不到任何效果,让其父母……睡前绘本海尼曼ThePainter!(有音频哦)Jennifer为了更好的服务于各位宝妈们,从今天开始,我们一起读分级绘本。我给大家指定了学习计划,每天提供绘本和音频资料,大家抱团学习,更有动力!这次我给大家选择……为考好学校多次复读值得吗?只有经历过才知道的心酸今天看到一个热搜,33岁男子高考12次引发争议:他背后的艰难和心酸,你想象不到。原来2010年唐尚珺第一次高考没上本科线,父亲让他读一所技校。他不甘心,拿着学费瞒着家人开始复读……男子深夜给娃做饭,拧开阀门瞬间悲剧发生,在ICU第一天就花1图为刘晶在病房门口等待平时都是孩子奶奶做饭,正好那天我们在家休息,晚上11点多孩子饿醒了,陈志想让母亲好好休息,自己起身去了厨房。过了一会儿‘轰’地一声,我们赶紧到院子里……499年前的今天麦哲伦完成环球航行麦哲伦环球航行的路线是:从欧洲出发经大西洋过麦哲伦海峡,过太平洋,经印度洋,过好望角,最后通过大西洋回到欧洲。1519年9月20日,麦哲伦率领一支由5条海船、234人组成的远航……英国70年研究长大有出息的孩子,都有三个明显特征,藏不住导读:大多数父母都希望自己的孩子赢在起跑线上,可以将来有出息。一般都寄予小孩很强的希望。因而宝宝的智力发育也成为了父母们最关注的内容。自从宝妈们怀孕时,便开始了宝宝的学习之旅。……
从不看朋友圈的人,心里是怎么想的?心理学这种人值得深交文章纯属原创,版权归本作者所有,欢迎个人转发分享。随着智能手机的高度普及,人们的社交方式从最初的见面、电话转变为现如今的微信联络,由此也催生出了朋友圈这一产物。朋友……59岁老汉色心不改,对老板娘动手动脚,老板娘等丈夫回来再报警俗话说,人不风流枉少年,可是还有句话说,男人至死是少年。因此,59岁老汉的行为似乎就合情合理了,当然这个合情合理是要画引号的。话说这位59岁的老汉,一把年纪了,还色……一本集大成的人文类知识儿童读物,让老母亲也忍不住开始恶补历史身为一名算不上自媒体人的自媒体人,我深知自己最大的缺陷是历史太差。历史太差,意味着脑中空空没有学识,意味着写文章做不到引经据典总之,这是写文章的一大弱点,而且是很难弥补的……2021年开学季先抓习惯,再谈成绩!班主任为孩子准备的好习惯作者:朗读君盼着盼着,孩子们终于要开学了,家长们也是长舒了一口气。但这口气还没吐畅快,就马上要面临孩子的各种考试,家长们又开始了一场硬仗。这时,还是要听班主任……好妈妈胜过好老师你给孩子最好的礼物,是有心而无痕的教育时钟滴答滴答走着,眼看就到了爸妈下班的时间,真的不能再拖了男孩恋恋不舍地关了电视机,去卫生间取了打湿的毛巾,盖在电视机上。他把客厅恢复原样,在书桌上摆好书本,把毛巾放回原处,坐……对得起所有人,就是对不起自己,神经症患者的内心世界不管你承不承认,既然你是人,内心就必然有阴影,如果你自己意识不到的话,不妨问问你的家人朋友或者熟人,让他们把你心中的阴影指给你看。我们总以为自己可以把阴暗面隐藏的天衣无缝,但是……孩子爱动手打人,别以暴制暴,了解原因后再对症下药有网友留言,孩子上幼儿园了以后脾气很大,一没顺心意,就大喊大叫,甚至挥拳踢脚的,把玩具扔得满地都是,跟小伙伴玩的时候也是一言不合就打人,妈妈为此非常苦恼,那么我们该怎么去好好管……为什么总有人去农村高价回收七八十年代的旧缝纫机?大家好,欢迎观看本期的科普大格局。现在跟以前的生活对比真的是让人叹为观止,现在大部分人说自己再穷,欠多少债,至少不愁吃穿,以前的年代,说穷就真的是穷,对于很多小孩子来说,……单亲家庭的小孩上学后的不同表现说明什么老师视角一年级入学统计学籍的时候,我了解到,班里一共有三个单亲家庭的孩子。这三个孩子,有许多共同之处,也有不同之处,我就从我作为一名老师的视角来谈谈单亲家庭的小孩上学后的不同表现,希望……不要站在山的另一边,和伴侣沟通为什么很多人和其他人沟通没有问题,但在婚姻中和伴侣沟通却总是容易吵架呢?著名社会语言学家黛博拉。泰南在书籍《听懂另一半》中说:如果女性使用的是一套有关人际关系和亲密……孙云晓生活感悟高雅的艺术就是需要一种纯粹的精神生活感悟339孙云晓生活感悟339:中国著名小提琴家、一代宗师盛中国先生,于2018年9月7日晚,心脏病突发抢救无效去世,享年77岁。多年前的一个夜晚,在北展剧场看演出,……复学后,儿童交通事故频发,为人父母,这些安全意识你要有文笑雪育儿思考我在西安,这座城市的孩子们在经历了加长版寒假后,从小学一年级到大学,目前都已基本返校复学,被关在家里这么久,孩子们就像出笼的小鸟一样,一头扎进广阔的天空里。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网