sjnnkk 2023-03-01 11:12 采纳率: 100%
浏览 57
已结题

Python数据结构

使用python编程语言实现Tkinter界面

该界面要有以下功能
(1)从键盘上输入n个长度为m的整数,程序可以输出这些整数的四种排序方式:快速排序,直接选择排序,冒泡排序,归并排序,并在界面显示每种排序的升序和降序以及排序的时间复杂度和空间复杂度;
(2)程序能对所输入的数字进行判断,如果不是所要求的长度,弹出提醒消息框;
(3)输出结果以逗号隔开。
(4)只能使用数据结构的知识实现,不能使用数据库

  • 写回答

1条回答 默认 最新

  • Web Security Loop 2023-03-01 13:26
    关注
    • 如果有帮到你,请采纳一下~
    
    import time
    import tkinter as tk
    from tkinter import messagebox
    
    
    class SortingAlgorithms:
        def __init__(self):
            pass
    
        def bubble_sort(self, arr):
            start_time = time.time()
            n = len(arr)
            for i in range(n):
                for j in range(0, n-i-1):
                    if arr[j] > arr[j+1]:
                        arr[j], arr[j+1] = arr[j+1], arr[j]
            end_time = time.time()
            time_complexity = end_time - start_time
            space_complexity = 1
            return arr, time_complexity, space_complexity
    
        def selection_sort(self, arr):
            start_time = time.time()
            n = len(arr)
            for i in range(n):
                min_idx = i
                for j in range(i+1, n):
                    if arr[min_idx] > arr[j]:
                        min_idx = j
                arr[i], arr[min_idx] = arr[min_idx], arr[i]
            end_time = time.time()
            time_complexity = end_time - start_time
            space_complexity = 1
            return arr, time_complexity, space_complexity
    
        def quick_sort(self, arr):
            start_time = time.time()
    
            def partition(arr, low, high):
                i = low - 1
                pivot = arr[high]
                for j in range(low, high):
                    if arr[j] <= pivot:
                        i = i + 1
                        arr[i], arr[j] = arr[j], arr[i]
                arr[i+1], arr[high] = arr[high], arr[i+1]
                return i+1
    
            def quick_sort_helper(arr, low, high):
                if low < high:
                    pi = partition(arr, low, high)
                    quick_sort_helper(arr, low, pi-1)
                    quick_sort_helper(arr, pi+1, high)
    
            quick_sort_helper(arr, 0, len(arr)-1)
            end_time = time.time()
            time_complexity = end_time - start_time
            space_complexity = len(arr)
            return arr, time_complexity, space_complexity
    
        def merge_sort(self, arr):
            start_time = time.time()
    
            def merge(arr, l, m, r):
                n1 = m - l + 1
                n2 = r - m
                L = [0] * n1
                R = [0] * n2
                for i in range(n1):
                    L[i] = arr[l + i]
                for j in range(n2):
                    R[j] = arr[m + 1 + j]
                i = 0
                j = 0
                k = l
                while i < n1 and j < n2:
                    if L[i] <= R[j]:
                        arr[k] = L[i]
                        i += 1
                    else:
                        arr[k] = R[j]
                        j += 1
                    k += 1
                while i < n1:
                    arr[k] = L[i]
                    i += 1
                    k += 1
                while j < n2:
                    arr[k] = R[j]
                    j += 1
                    k += 1
    
            def merge_sort_helper(arr, l, r):
                if l < r:
                    m = (l+(r-1)) // 2
                    merge_sort_helper(arr, l, m)
                    merge_sort_helper(arr, m+1, r)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd