插入排序的可视化实现(Python)

插入排序的Python代码

import tkinter as tk
import random
import timeclass InsertionSortVisualizer:def __init__(self, root, canvas_width=800, canvas_height=400, num_bars=10):self.root = rootself.canvas_width = canvas_widthself.canvas_height = canvas_heightself.num_bars = num_barsself.bar_width = canvas_width // num_barsself.data = [random.randint(1, canvas_height) for _ in range(num_bars)]self.canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)self.canvas.pack()self.draw_data()def draw_data(self, colored_index=None):self.canvas.delete("all")for i, value in enumerate(self.data):# 根据状态选择颜色,这里使用简单逻辑,可根据需要调整if colored_index is not None and i in colored_index:color = "red"else:color = "blue"self.canvas.create_rectangle(i * self.bar_width, self.canvas_height - value,(i + 1) * self.bar_width, self.canvas_height,fill=color)self.root.update_idletasks()def insertion_sort(self):for i in range(1, len(self.data)):key = self.data[i]# 刷新显示,将当前处理的元素标为红色self.draw_data([i])j = i - 1while j >= 0 and key < self.data[j]:self.data[j + 1] = self.data[j]j -= 1self.data[j + 1] = key# 刷新显示,标记正在比较的元素self.draw_data([j + 1])time.sleep(0.5)  # 延时,以便观察过程self.draw_data()  # 最后一步,用统一颜色画出排序后的数据def main():root = tk.Tk()root.title("插入排序")app = InsertionSortVisualizer(root)# 开始排序按钮tk.Button(root, text="开始", command=app.insertion_sort).pack()root.mainloop()if __name__ == "__main__":main()

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636105.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【1471】java项目进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 项目进度管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

javaWeb项目-智慧餐厅点餐管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JavaScript Java…

中国人为什么不说自信,而说信天

中国人从来不说自信&#xff0c;中国人信天&#xff0c;老天爷是最公平的。做好自己&#xff0c;天命注定&#xff0c;我都这么努力了&#xff0c;老天爷不帮我帮谁&#xff1f; 中国人信天是有逻辑关系的&#xff0c;很简单&#xff1a;做错事情了或者结果不好了&#xff0c;…

如何爬出 Kotlin 协程死锁的坑?

作者&#xff1a;悬衡 一、前言 在 Java 中有一个非常经典的死锁问题, 就是明明自己已经占用了线程池, 却还继续去申请它, 自己等自己, 就死锁了, 如下图和代码: // 这段代码将死锁到天荒地老final ExecutorService executorService Executors.newSingleThreadExecutor();exe…

c/c++开发方向

(17 封私信 / 1 条消息) c/c中最挣钱的方向是哪个&#xff1f; - 知乎 (zhihu.com) C的特点是尽量把硬件的性能利用起来。 性能敏感的垂直领域。 &#xff08;快&#xff09;&#xff08;性能&#xff09;&#xff08;性能&#xff09; &#xff08;可能就不是去写应用层业…

域名信息查询同款WHOIS源码

域名查询一般是指查询域名的whois注册信息&#xff0c;域名WHOIS是当前域名系统中不可或缺的一项信息服务。在使用域名进行Internet冲浪时&#xff0c;很多用户希望进一步了解域名、名字服务器详细信息&#xff0c;这就会用到WHOIS。 域名信息查询同款WHOIS源码

鞋狗电子书免费下载

鞋狗电子书免费下载 链接&#xff1a;https://pan.quark.cn/s/54e80e57fb42

CCF-CSP真题《202312-3 树上搜索》思路+c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 问题描述 试题编号&#xff1a;202312-3试题名称&#xff1a;树上搜索时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 题目背景 问题描述 输入格式 输出格式 样…

16.Class绑定

Class绑定 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表&#xff0c;因为 class 是 attribute&#xff0c;我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c;通过拼接生成字符串是麻烦且易出…

stl_set

文章目录 set1.关联式容器2.键值对3. set3.1 set介绍3.2 set的使用3.2.1 pair3.2.2 find3.2.3 lower_bound 3.3 multiset3.3.1 multiset的介绍3.3.2 multiset的使用3.3.3 find3.3.4 equal_range3.3.5 erase set 1.关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分…

polkit服务启动失败

使用systemctl 命令报错 Authorization not available. Check if polkit service is running or see debug message for more information. 查看polkit状态是失败的状态&#xff0c;报缺少libstdc.so.6 systemctl status polkit 需要安装libstdc.so.6库 先加载所有安装包 …

MyBatis 框架学习(II)

MyBatis 框架学习(II) 文章目录 MyBatis 框架学习(II)1. 介绍2. 准备&测试2.1 配置数据库连接字符串和MyBatis2.2 编写持久层代码 3. MyBatis XML基础操作3.1 Insert 操作3.2 Delete 操作3.3 Update 操作3.4 Select 操作 4. #{} 与 ${}的使用5. 动态SQL操作5.1 < if >…