Advertisement
Chl_Snt

rtge

May 19th, 2024
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import ttk
  3. import random
  4. import timeit
  5. from loguru import logger
  6.  
  7.  
  8. logger.remove()
  9.  
  10. class SortingComparisonApp:
  11. def __init__(self):
  12. self.root = tk.Tk()
  13. self.root.title("Сравнение сортировки")
  14. self.root.geometry("700x720")
  15. self.root.resizable(False, False)
  16. self.my_list = []
  17.  
  18. self.create_list_button = ttk.Button(self.root, text="Создать список", command=self.create_random_list)
  19. self.create_list_button.pack(pady=10)
  20.  
  21. self.data_text = tk.Text(self.root, wrap=tk.WORD)
  22. self.data_text.pack(pady=5)
  23. self.data_text.bind("<Key>", self.on_text_edit)
  24.  
  25. self.bubble_label = ttk.Label(self.root, text="Bubble Sort:")
  26. self.bubble_label.pack(pady=5)
  27. self.quick_label = ttk.Label(self.root, text="Quick Sort:")
  28. self.quick_label.pack(pady=5)
  29.  
  30. self.run_button = ttk.Button(self.root, text="Запустить сравнение", command=self.run_sorting)
  31. self.run_button.pack(pady=10)
  32.  
  33. self.bubble_final_label = ttk.Label(self.root, text="Bubble Sort:")
  34. self.bubble_final_label.pack(pady=5)
  35.  
  36. self.bubble_final_text = tk.Text(self.root, wrap=tk.WORD, height=2)
  37. self.bubble_final_text.pack(pady=5)
  38.  
  39. self.quick_final_label = ttk.Label(self.root, text="Quick Sort:")
  40. self.quick_final_label.pack(pady=5)
  41.  
  42. self.quick_final_text = tk.Text(self.root, wrap=tk.WORD, height=2)
  43. self.quick_final_text.pack(pady=5)
  44.  
  45.  
  46. def create_random_list(self):
  47. self.my_list = [random.randint(1, 1000) for _ in range(1000)]
  48. self.data_text.insert("1.0", ",".join(map(str, self.my_list)))
  49. logger.info("Создан новый случайный список.")
  50.  
  51.  
  52. @logger.catch
  53. def run_sorting(self):
  54. # Измерьте время выполнения сортировки пузырьком
  55. bubble_start_time = timeit.default_timer()
  56. bf = bubble_sort(self.my_list[:])
  57. bubble_time = timeit.default_timer() - bubble_start_time
  58.  
  59. # Измерьте время выполнения быстрой сортировки
  60. quick_start_time = timeit.default_timer()
  61. qf = quick_sort(self.my_list[:])
  62. quick_time = timeit.default_timer() - quick_start_time
  63.  
  64. self.bubble_label.config(text=f"Bubble Sort: {bubble_time:.6f} sec")
  65. self.quick_label.config(text=f"Quick Sort: {quick_time:.6f} sec")
  66.  
  67. self.bubble_final_text.delete("1.0", "end")
  68. self.bubble_final_text.insert("1.0", bf)
  69.  
  70. self.quick_final_text.delete("1.0", "end")
  71. self.quick_final_text.insert("1.0", qf)
  72.  
  73. logger.success("Сравнение сортировки завершено.")
  74.  
  75. @logger.catch
  76. def on_text_edit(self, event):
  77. data = self.data_text.get("1.0", "end")
  78. data = list(map(float, data.split(",")))
  79. a = sum(data) - int(sum(data))
  80. self.my_list = list(map(int if a == 0 else float, data))
  81. logger.debug("Значение обновлено!")
  82. logger.debug(self.my_list)
  83.  
  84. @logger.catch
  85. def bubble_sort(data):
  86. N = len(data)
  87. for i in range(0, N - 1):
  88. for j in range(0, N - 1 - i):
  89. if data[j] > data[j + 1]:
  90. data[j], data[j + 1] = data[j + 1], data[j]
  91. return data
  92.  
  93. @logger.catch
  94. def quick_sort(data):
  95. if len(data) > 1:
  96. x = data[random.randint(0, len(data) - 1)]
  97. low = [u for u in data if u < x]
  98. eq = [u for u in data if u == x]
  99. hi = [u for u in data if u > x]
  100. data = quick_sort(low) + eq + quick_sort(hi)
  101. return data
  102.  
  103.  
  104.  
  105. if __name__ == "__main__":
  106. logger.add("sorting_log.log", rotation="10 MB")
  107. app = SortingComparisonApp()
  108. app.root.mainloop()
  109.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement