吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1228|回复: 12
收起左侧

[Python 原创] python插入排序tkinter演示

[复制链接]
Eks6666 发表于 2023-8-6 13:37
[Python] 纯文本查看 复制代码
# coding: utf-8
import tkinter as tk
import random
import copy
import tkinter.messagebox

width = 30  # 矩形条宽度
x0 = 80  # 矩形条x轴初始值
y0 = 350  # 矩形条最高度
index = 0  # 待排序数字的下标标记
sortL = []  # 存储插入排序的每一步结果

root = tk.Tk()
root.title("动画演示插入排序")
root.geometry('640x500+250+250')
root.resizable(False, False)

def insertSort():
    """
    生成随机数组, 并且保存插入排序的每步结果, 保存到sortL
    :param num:
    :return:
    """
    global sortL
    # 随机生成数据列表
    num = [i for i in range(1, 31, 1)]
    random.shuffle(num)
    num = num[:15]  # 取随机数组的前15个组成列表

    sortL.append(copy.deepcopy(num))  # 存储每次排序结果
    # 插入排序算法
    for i in range(1, len(num)):
        key = num[i]
        j = i - 1
        while j >= 0 and key < num[j]:
            num[j + 1] = num[j]
            j -= 1
        num[j + 1] = key
        sortL.append(copy.deepcopy(num))  # 存储每次排序结果
    sortL.append(copy.deepcopy(num))


def draw():
    """
    绘制结果
    :return:
    """
    global width, x0, y0, index, sortL
    x0 = 80  # x 坐标初始化
    print(sortL[index])

    def step():
        # 删除每一个矩形以及字符
        for i in range(15):
            canvas.delete(str(i))
            canvas.delete("string" + str(i))
        draw()  # 重新绘制
    stepBtn = tk.Button(root, text="单步排序", width=8, height=1, command=step)
    stepBtn.place(x=200, y=420)

    def reset():
        global index
        index = 0
        sortL.clear()  # 清空结果列表
        insertSort()  # 执行插入排序算法
        draw()  # 绘制结果列表中的每一项
    resetBtn = tk.Button(root, text="重置数据", width=8, height=1, command=reset)
    resetBtn.place(x=350, y=420)

    canvas = tk.Canvas(root, bg='white', height=400, width=1000)
    canvas.place(x=0, y=0)
    for i in range(15):
        # 绘制矩形条
        if index + 1 == i:  # 用红色标记待排序的数字
            canvas.create_rectangle(x0, y0 - sortL[index][i] * 10,
                                    x0 + width, y0, width=3, fill='red',
                                    tags=str(i))
        else:
            canvas.create_rectangle(x0, y0 - sortL[index][i] * 10, x0 + width,
                                    y0, width=3, tags=str(i))
        # 绘制文本
        canvas.create_text(x0 + width // 2, y0 - sortL[index][i] * 10 -
                           width // 2, text=str(sortL[index][i]),
                           font="time 10 bold underline",
                           tags="string" + str(i))
        x0 = x0 + width
    if index == 14:
        tk.messagebox.showinfo('信息', '排序完成')
    index += 1


if __name__ == "__main__":
    insertSort()
    draw()
    root.mainloop()
1691300142241.jpg
1691300200110.jpg

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
音夜醉 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kk159 发表于 2023-8-6 14:35
哈哈哈 你这样写 确定完成排序了 list不会越界?
sn2209161 发表于 2023-8-6 14:35
 楼主| Eks6666 发表于 2023-8-6 15:44
kk159 发表于 2023-8-6 14:35
哈哈哈 你这样写 确定完成排序了 list不会越界?

不会越界的
KayCHENvip 发表于 2023-8-6 16:59
大佬辛苦了,可以讲一下哪些地方用得着这个吗?
 楼主| Eks6666 发表于 2023-8-6 17:13
sn2209161 发表于 2023-8-6 14:35
感谢楼主分享,这个蛮耗费精力的吧,辛苦

是的,给你关注把,铁子
moments 发表于 2023-8-6 18:20
清晰直观。
kk159 发表于 2023-8-6 21:19

r u sure? 你跑完试试,~
vethenc 发表于 2023-8-6 21:58
感谢分享,还能这么玩啊
音夜醉 发表于 2023-8-6 22:51
要是能对任意输入的排序算法进行展示的话就更棒了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表