📜  在Python中使用 Tkinter 可视化合并排序(1)

📅  最后修改于: 2023-12-03 15:07:55.268000             🧑  作者: Mango

在Python中使用 Tkinter 可视化合并排序

简介

合并排序(Merge Sort)是一种分治策略的排序算法,其基本思想是将原始列表分成若干个小的子序列,然后将这些子序列两两合并,直到合并成一个有序的序列。

使用Tkinter库可以实现可视化合并排序。Tkinter是Python的一个内置图形用户界面GUI库,提供了创建窗口和控件的功能,使得程序能够以图形化的方式展示某些功能。

程序实现步骤

以下是使用Tkinter实现可视化合并排序的步骤:

  1. 引入所需库
import tkinter as tk
import random
import time
  1. 定义函数
# 随机生成数字数组
def random_list():
    return [random.randint(1, 100) for _ in range(10)]

# 合并排序
def merge_sort(nums):
    if len(nums) <= 1:
        return nums
    mid = len(nums) // 2
    left = merge_sort(nums[:mid])
    right = merge_sort(nums[mid:])
    return merge(left, right)

# 合并两个有序列表
def merge(left, right):
    i, j = 0, 0
    res = []
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            res.append(left[i])
            i += 1
        else:
            res.append(right[j])
            j += 1
    while i < len(left):
        res.append(left[i])
        i += 1
    while j < len(right):
        res.append(right[j])
        j += 1
    return res
  1. 创建窗口和控件
window = tk.Tk()
window.title("可视化合并排序")
window.geometry("400x400")

# 创建文本框显示排序前的数组
before_sort_text = tk.Text(window, height=5)
before_sort_text.pack()

# 创建按钮,点击按钮触发排序事件
sort_btn = tk.Button(window, text="排序")
sort_btn.pack()

# 创建文本框显示排序后的数组
after_sort_text = tk.Text(window, height=5)
after_sort_text.pack()

# 创建画布,用于绘制排序过程和结果
canvas = tk.Canvas(window, height=300, width=300, bg="white")
canvas.pack()
  1. 编写事件处理函数
def sort():
    nums = list(map(int, before_sort_text.get("1.0", "end").split()))
    sorted_nums = merge_sort(nums)
    after_sort_text.insert("end", str(sorted_nums))
    draw(sorted_nums)

def draw(nums):
    width = 20
    height = 15
    x_offset = 50
    y_offset = 150
    for i in range(len(nums)):
        x = x_offset + i * width
        y = y_offset - nums[i] * height
        canvas.create_rectangle(x, y, x+width, y+nums[i]*height, fill="blue")
        canvas.create_text(x, y, anchor="sw", text=str(nums[i]))
        canvas.update()
        time.sleep(0.5)
  1. 绑定事件
sort_btn.config(command=sort)
  1. 运行程序
window.mainloop()
效果展示

运行程序后,可以输入要排序的数组,点击排序按钮即可观察到排序的过程和结果。

在每次绘制矩形时,程序会暂停500毫秒,以便观察合并排序的过程。

合并排序界面

总结

使用Tkinter库可以方便地实现Python程序的GUI界面。通过本文介绍的方法,可以实现可视化合并排序,并观察到排序的过程和结果。可以将本方法应用于其他算法的可视化实现,提高程序的交互性和可视化效果。