# -*- coding:utf-8 -*-
import time
from Tkinter import *
a=[1,9,5,6,8,1] class CanvasDemo():
#n1=70
#n2=n1+40
d1=390
d2=d1-60
weiyi=len(a)-1
def __init__(self): n1=70
n2=n1+40
window=Tk()
window.title("冒泡排序演示")
self.canvas=Canvas(window,width=500,height=400,bg='white')##设置画布大小,颜色
self.canvas.pack()
frame=Frame(window)
frame.pack()
##self.paixu()
self.displayRect()
self.n1=n1+60
self.n2=n2+60
btString=Button(frame,text="执行",command=self.paixu)
btString.grid(row=1,column=6)
window.mainloop() def displayRect(self):##打印表格
self.canvas.create_rectangle(60,30,420,90,tags="rect")##左上右下
self.canvas.create_rectangle(120,30,360,90,tags="rect")
self.canvas.create_rectangle(180,30,300,90,tags="rect")
self.canvas.create_rectangle(240,30,240,90, tags="rect")
def paixu(self): for i in range(0,len(a)):
j=len(a)-1##添加交换之前
self.weiyi=len(a)-1
while j>i:
self.displayString2()
time.sleep(1)
#if j>i:
# self.canvas.delete("int") ##self.weiyi=len(a)-1
self.displayString3()
time.sleep(1)
if a[j-1]>a[j]:
a[j-1],a[j]=a[j],a[j-1]
#j=j-1
self.displayString4()
if j>=i:
self.canvas.delete("int")
self.displayString1()##打印交换之后的
time.sleep(1) if j>=i:
self.canvas.delete("int")
j=j-1
self.displayString1() def displayLine(self):## 设置箭头指向
self.canvas.create_line(self.n2,30,self.n2,10,self.n2+60,10,self.n2+60,30,width=1,arrow="last",tags="line") def displayString1(self):## 打印序列
n1=90
##time.sleep(1) for z in range(len(a)):
self.canvas.create_text(n1,60,text="%s"%a[z],font="Times 20 bold ",tags="int")
n1=n1+60
self.canvas.update()
#self.update()
#time.sleep(0.5) def displayString2(self):
n2=90
for z in range(len(a)):
if z!=self.weiyi and z!=self.weiyi-1:
self.canvas.create_text(n2,60,text="%s"%a[z],font="Times 20 bold ",tags="int")
n2=n2+60
self.canvas.update()
self.weiyi=self.weiyi-1
def displayString3(self):
n2=90
for z in range(len(a)):
if z==self.weiyi:
if a[z]>a[z+1]:
self.canvas.create_line(n2,30,n2,10,n2+60,10,n2+60,30,width=1,arrow="last",tags="line")
self.canvas.create_text(n2,60,text="%s"%a[z],font="Times 20 bold ",tags="int1")
self.canvas.create_text(n2+60,60,text="%s"%a[z+1],font="Times 20 bold",tags="int1")
for x in range(0,10):
self.canvas.move("int1",0,20)
self.canvas.move("int12",0,20)
self.canvas.update()
time.sleep(0.1)
if(x==9):
self.canvas.delete("int1")
n2=n2+60
self.canvas.update()
def displayString4(self):
n2=90
for z in range(len(a)):
if z==self.weiyi:
self.canvas.create_text(n2,300,text="%s"%a[z],font="Times 20 bold ",tags="int2")
self.canvas.create_text(n2+60,300,text="%s"%a[z+1],font="Times 20 bold ",tags="int2")
for x in range(0,10):
self.canvas.move("int2",0,-20)
self.canvas.update()
time.sleep(0.1)
if(x==9):
self.canvas.delete("int2","line")
n2=n2+60 CanvasDemo()

用python实现,冒泡排序演示的更多相关文章

  1. python 类继承演示范例的代码

    把做工程过程重要的代码片段备份一次,下面的资料是关于python 类继承演示范例的代码. # a simple example of a class inheritance # tested with ...

  2. python笔记--冒泡排序升级版

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...

  3. python与冒泡排序

    上一篇文章,介绍了一个非常快的排序算法--桶排序,但是它的缺点就是太耗资源了,这次要实现的算法就不用太耗资源了,它就是冒泡排序. 问题提出: 将以下数据升序排列:9, 2, 8, 6, 4 冒泡排序原 ...

  4. python笔记-冒泡排序【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一 ...

  5. 运用python实现冒泡排序算法

    冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名. 冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右 ...

  6. python 实现冒泡排序与快速排序 遇到的错误与问题

    今天看了兄弟连php里面的冒泡排序与快速排序,想了下应该可以用python实现. 冒泡排序函数: def mysort(x): len1 = len(x) for i in range(len1-1, ...

  7. python 算法 -- 冒泡排序

    python 排序算法 -- 冒泡排序 原理 从数组的底部开始, 两两比较大小, 小的在下,大的在上, 依次类推直到顶部. 当整个数组比较完毕, 则最上面的一定是最大值(此即冒泡的由来); 当第一轮比 ...

  8. python实现冒泡排序和快速排序

    冒泡排序和快排的python实现: data = [1, 3, 5, 10, 4, 7] times = 0 "冒泡排序" for i in range(len(data)): f ...

  9. Python版冒泡排序算法

    0 为什么写本文 一方面对经典排序算法冒泡排序进行复习,另一方面通过实际应用来检验python基础知识的掌握情况,包括range函数.len函数.for循环.if语句.函数定义与调用.列表的排序等知识 ...

随机推荐

  1. CentOS 6.5安装 ASM lib

    asmlib针对linux centos 6.5版本包,包括内核升级包.下载失败的话自己配置网易yum源. 安装方法: yum install oracleasm 执行后,会检查环境依赖情况,包括内核 ...

  2. 关于meta标签

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...

  3. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.

    samcao@samcao-Lenovo-IdeaPad-Y470:~/caodjango/caossh$ python manage.py sqlall getssh System check id ...

  4. JWPlayer第一个例子

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. Iscroll解析

    做了一些移动端的产品,发现一些滚动效果很多会使用 iscroll 作为底层库(如阿里小蜜).iscroll 的文档已经好久没更新了,而且比较简单,经常需要直接读源码.这里写一篇总结,作为对 iscro ...

  6. 新手看Mockplus

    如今是一个快节奏的社会,每一天都会有无数的软件发布,每一款软件的制作过程不可避免的需要使用原型设计工具.而Mockplus就是一款原型设计软件,可以用于移动端,PC端以及WEB的原型设计.它也符合如今 ...

  7. Linux下VFP NEON浮点编译

    http://blog.csdn.net/liujia2100/article/details/27236477 NEON:SIMD(Single Instruction Multiple Data ...

  8. 大前端学习笔记整理【二】CSS视觉格式化模型

    1. 概念 在视觉格式化模型中,文档树中的每个元素都将会根据盒模型产生零到多个盒子.这些盒子的布局由如下因素决定: 盒子的尺寸和类型 定位策略(正常文档流,浮动或者绝对定位) 和文档树中其他元素的关系 ...

  9. appium踩过的坑(1):NoClassDefFoundError

    1.引入jar包错误导致的错误: 引入的jar包引起的 应该引入下面的jar包

  10. H5前端性能测试快速入门

    前言 说到H5测试,对于做WEB测试的同学来说再熟悉不过了,它包括页H5功能测试,前端性能测试,浏览器兼容性能测试,以及服务端性能测试.那本文谈到的则是H5前端性能测试,并希望通过阅读本文后,能够知道 ...