Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.55 KB | None | 0 0
  1. from random import *
  2. from time import perf_counter
  3. from tkinter import *
  4. from tkinter import messagebox
  5. import tkinter.ttk as tk
  6. import matplotlib.pyplot as plt
  7. from numpy import *
  8. from math import *
  9.  
  10.  
  11. def before_sort_func():
  12.     pass
  13.  
  14.  
  15. def after_sort_func():
  16.     pass
  17.  
  18. def sort_example():
  19.     data = []
  20.     before = ''
  21.  
  22.     for i in range(9):
  23.         number = randint(-100, 100)
  24.         data.append(number)
  25.         before += str(number) + ' '
  26.  
  27.     window = Tk()
  28.     window.title('Пример работы сортировки')
  29.     window.geometry('300x120')
  30.  
  31.     before_sort_label = Label(window, text='До сортировки', font=("Times New "
  32.                                                               "Roman",
  33.                                                          13))
  34.     before_sort_label.place(x=93, y=5, width = 110)
  35.  
  36.     before_sort = Button(window, text=before, font=("Times New Roman",
  37.                                                          13),
  38.                          command=before_sort_func)
  39.     before_sort.place(x=5, y=35, width=290, height=20)
  40.  
  41.     after = ''
  42.  
  43.     for i in range(len(data)):
  44.         key = data[i]
  45.         lo, hi = 0, i
  46.         while lo < hi:
  47.             mid = lo + (hi - lo) // 2
  48.             if key < data[mid]:
  49.                 hi = mid
  50.             else:
  51.                 lo = mid + 1
  52.         for j in range(i, lo, -1):
  53.             data[j] = data[j - 1]
  54.         data[lo] = key
  55.  
  56.     for i in range(len(data)):
  57.         after += str(data[i]) + ' '
  58.  
  59.     after_sort_label = Label(window, text='После сортировки', font=("Times "
  60.                                                                     "New "
  61.                                                                  "Roman",
  62.                                                                  13))
  63.     after_sort_label.place(x=85, y=60, width=130)
  64.  
  65.     after_sort = Button(window, text=after, font=("Times New Roman",
  66.                                                    13),
  67.                         command=after_sort_func)
  68.     after_sort.place(x=5, y=95, width=290, height=20)
  69.  
  70.     window.mainloop()
  71.  
  72.  
  73. def build_plot():
  74.     N1 = inp_window_4.get()
  75.     N2 = inp_window_5.get()
  76.  
  77.     if ('-' in N1 or N1.isdigit() == False or int(N1) <= 0):
  78.         messagebox.showerror('Ошибка ввода', 'Введен неверный размер массива'
  79.                                              ' N1')
  80.         inp_window_1.delete(0, END)
  81.         return
  82.  
  83.     if ('-' in N2 or N2.isdigit() == False or int(N2) <= 0):
  84.         messagebox.showerror('Ошибка ввода', 'Введен неверный размер массива'
  85.                                              ' N2')
  86.         inp_window_2.delete(0, END)
  87.         return
  88.  
  89.     N1 = int(N1)
  90.     N2 = int(N2)
  91.  
  92.     array = []
  93.  
  94.     for i in range(min(N1, N2)):
  95.         array.append(randint(-200, 200))
  96.  
  97.     start = perf_counter()
  98.  
  99.     for i in range(len(array)):
  100.         key = array[i]
  101.         lo, hi = 0, i
  102.         while lo < hi:
  103.             mid = lo + (hi - lo) // 2
  104.             if key < array[mid]:
  105.                 hi = mid
  106.             else:
  107.                 lo = mid + 1
  108.         for j in range(i, lo, -1):
  109.             array[j] = array[j - 1]
  110.         array[lo] = key
  111.         stop = perf_counter()
  112.  
  113.     time_plot = []
  114.     size_plot = []
  115.     time_now = stop - start
  116.     size_now = min(N1, N2)
  117.  
  118.     for i in range(10):
  119.         time_plot.append(time_now)
  120.         size_plot.append(size_now)
  121.         size_now += 1000
  122.         time_now += time_now * pow(size_now/(size_now - 1000), 2)
  123.     print(time_plot)
  124.     print(size_plot)
  125.     plt.title('Размер к времени')
  126.     plt.grid()
  127.     plt.xlabel('Размер')
  128.     plt.ylabel('Время')
  129.     plt.figure()
  130.     plt.plot(size_plot, time_plot)
  131.     plt.show()
  132.  
  133.  
  134. def build_table():
  135.     N1 = inp_window_1.get()
  136.     N2 = inp_window_2.get()
  137.     N3 = inp_window_3.get()
  138.  
  139.     if ('-' in N1 or N1.isdigit() == False or int(N1) <= 0):
  140.         messagebox.showerror('Ошибка ввода', 'Введен неверный размер массива'
  141.                                              ' N1')
  142.         inp_window_1.delete(0, END)
  143.         return
  144.  
  145.     if ('-' in N2 or N2.isdigit() == False or int(N2) <= 0):
  146.         messagebox.showerror('Ошибка ввода', 'Введен неверный размер массива'
  147.                                              ' N2')
  148.         inp_window_2.delete(0, END)
  149.         return
  150.  
  151.     if ('-' in N3 or N3.isdigit() == False or int(N3) <= 0):
  152.         messagebox.showerror('Ошибка ввода', 'Введен неверный размер массива'
  153.                                              ' N3')
  154.         inp_window_3.delete(0, END)
  155.         return
  156.  
  157.     N1 = int(N1)
  158.     N2 = int(N2)
  159.     N3 = int(N3)
  160.  
  161.     size = []
  162.     size.append(N1)
  163.     size.append(N2)
  164.     size.append(N3)
  165.     sum = N1 + N2 + N3
  166.     middle = sum - max(N1,N2,N3) - min(N1,N2,N3)
  167.  
  168.     table_root = Tk()
  169.     table_root.title = ("Таблица сравнения")
  170.     table_root.geometry('512x100')
  171.  
  172.     tree = tk.Treeview(table_root)
  173.     tree['columns'] = ('one', 'two', 'three')
  174.     tree.column('#0', width=212, minwidth=140)
  175.     tree.column('one', width=100, minwidth=100)
  176.     tree.column('two', width=100, minwidth=100)
  177.     tree.column('three', width=100, minwidth=100)
  178.  
  179.     tree.heading('#0', text = '', anchor = CENTER)
  180.     tree.heading('one', text = str(min(N1,N2,N3)), anchor = CENTER)
  181.     tree.heading('two', text = str(middle), anchor = CENTER)
  182.     tree.heading('three', text = str(max(N1,N2,N3)), anchor = CENTER)
  183.     tree.pack()
  184.  
  185.     array = []
  186.     for i in range(max(N1, N2, N3)):
  187.         array.append(i)
  188.  
  189.  
  190.     start_1 = perf_counter()
  191.     start_2 = perf_counter()
  192.     start_3 = perf_counter()
  193.  
  194.     for i in range(len(array)):
  195.         if (i == min(N1, N2, N3)):
  196.             stop_1 = perf_counter()
  197.  
  198.         if (i in size and i != min(N1, N2, N3) and i != max(N1, N2, N3)):
  199.             stop_2 = perf_counter()
  200.  
  201.         key = array[i]
  202.         lo, hi = 0, i
  203.         while lo < hi:
  204.             mid = lo + (hi - lo) // 2
  205.             if key < array[mid]:
  206.                 hi = mid
  207.             else:
  208.                 lo = mid + 1
  209.         for j in range(i, lo, -1):
  210.             array[j] = array[j - 1]
  211.         array[lo] = key
  212.     stop_3 = perf_counter()
  213.  
  214.     tree.insert('', 'end', text='Упорядоченный массив', tags=('ttk'),
  215.                 values=('{:0.6e}'.format(stop_1 - start_1),
  216.                         '{:0.6e}'.format(stop_2 - start_2),
  217.                         '{:0.6e}'.format(stop_3 - start_3)))
  218.  
  219.     array.clear()
  220.     array_1 = []
  221.     array_2 = []
  222.     array_3 = []
  223.  
  224.     for i in range(max(N1, N2, N3)):
  225.         number = randint(-500, 500)
  226.         if i < min(N1, N2, N3):
  227.             array_1.append(number)
  228.         if i < middle:
  229.             array_2.append(number)
  230.         array_3.append(number)
  231.  
  232.     start_1 = perf_counter()
  233.  
  234.     for i in range(len(array_1)):
  235.         key = array_1[i]
  236.         lo, hi = 0, i
  237.         while lo < hi:
  238.             mid = lo + (hi - lo) // 2
  239.             if key < array_1[mid]:
  240.                 hi = mid
  241.             else:
  242.                 lo = mid + 1
  243.         for j in range(i, lo, -1):
  244.             array_1[j] = array_1[j - 1]
  245.         array_1[lo] = key
  246.     stop_1 = perf_counter()
  247.  
  248.     start_2 = perf_counter()
  249.  
  250.     for i in range(len(array_2)):
  251.         key = array_2[i]
  252.         lo, hi = 0, i
  253.         while lo < hi:
  254.             mid = lo + (hi - lo) // 2
  255.             if key < array_2[mid]:
  256.                 hi = mid
  257.             else:
  258.                 lo = mid + 1
  259.         for j in range(i, lo, -1):
  260.             array_2[j] = array_2[j - 1]
  261.         array_2[lo] = key
  262.     stop_2 = perf_counter()
  263.  
  264.     start_3 = perf_counter()
  265.  
  266.     for i in range(len(array_3)):
  267.         key = array_3[i]
  268.         lo, hi = 0, i
  269.         while lo < hi:
  270.             mid = lo + (hi - lo) // 2
  271.             if key < array_3[mid]:
  272.                 hi = mid
  273.             else:
  274.                 lo = mid + 1
  275.         for j in range(i, lo, -1):
  276.             array_3[j] = array_3[j - 1]
  277.         array_3[lo] = key
  278.     stop_3 = perf_counter()
  279.  
  280.     tree.insert('', 'end', text='Случайный массив', tags=('ttk'),
  281.                 values=('{:0.6e}'.format(stop_1 - start_1),
  282.                         '{:0.6e}'.format(stop_2 - start_2),
  283.                         '{:0.6e}'.format(stop_3 - start_3)))
  284.     array_1.clear()
  285.     array_2.clear()
  286.     array_3.clear()
  287.  
  288.     for i in range(max(N1, N2, N3), 0, -1):
  289.         if i > max(N1, N2, N3) - min(N1, N2, N3):
  290.             array_1.append(i)
  291.         if i > max(N1, N2, N3) - middle:
  292.             array_2.append(i)
  293.         array_3.append(i)
  294.  
  295.     start_1 = perf_counter()
  296.  
  297.     for i in range(len(array_1)):
  298.         key = array_1[i]
  299.         lo, hi = 0, i
  300.         while lo < hi:
  301.             mid = lo + (hi - lo) // 2
  302.             if key < array_1[mid]:
  303.                 hi = mid
  304.             else:
  305.                 lo = mid + 1
  306.         for j in range(i, lo, -1):
  307.             array_1[j] = array_1[j - 1]
  308.         array_1[lo] = key
  309.     stop_1 = perf_counter()
  310.  
  311.     start_2 = perf_counter()
  312.  
  313.     for i in range(len(array_2)):
  314.         key = array_2[i]
  315.         lo, hi = 0, i
  316.         while lo < hi:
  317.             mid = lo + (hi - lo) // 2
  318.             if key < array_2[mid]:
  319.                 hi = mid
  320.             else:
  321.                 lo = mid + 1
  322.         for j in range(i, lo, -1):
  323.             array_2[j] = array_2[j - 1]
  324.         array_2[lo] = key
  325.     stop_2 = perf_counter()
  326.  
  327.     start_3 = perf_counter()
  328.  
  329.     for i in range(len(array_3)):
  330.         key = array_3[i]
  331.         lo, hi = 0, i
  332.         while lo < hi:
  333.             mid = lo + (hi - lo) // 2
  334.             if key < array_3[mid]:
  335.                 hi = mid
  336.             else:
  337.                 lo = mid + 1
  338.         for j in range(i, lo, -1):
  339.             array_3[j] = array_3[j - 1]
  340.         array_3[lo] = key
  341.     stop_3 = perf_counter()
  342.  
  343.     tree.insert('', 'end', text='Обратно упорядоченный массив',
  344.                 tags=('ttk'),
  345.                 values=('{:0.6e}'.format(stop_1 - start_1),
  346.                         '{:0.6e}'.format(stop_2 - start_2),
  347.                         '{:0.6e}'.format(stop_3 - start_3)))
  348.     array_1.clear()
  349.     array_2.clear()
  350.     array_3.clear()
  351.  
  352.     table_root.mainloop()
  353.  
  354.  
  355. root = Tk()
  356. root.title('Сортировка вставками с бинарным поиском')
  357. root.geometry('320x175')
  358.  
  359. inp_1 = StringVar()
  360. inp_2 = StringVar()
  361. inp_3 = StringVar()
  362. inp_4 = StringVar()
  363. inp_5 = StringVar()
  364.  
  365. left_label = Label(text = 'Левая граница', font = ("Times New Roman", 12))
  366. left_label.place(x = 20, y = 15)
  367.  
  368. right_label = Label(text = 'Правая граница', font = ("Times New Roman", 12))
  369. right_label.place(x = 180, y = 15)
  370.  
  371. inp_window_4 = Entry(root, textvariable = inp_4, font = (
  372.     "Times New Roman", 13))
  373. inp_window_4.place(x = 20, y = 40, width = 110, height = 20)
  374.  
  375. inp_window_5 = Entry(root, textvariable = inp_5, font = (
  376.     "Times New Roman", 13))
  377. inp_window_5.place(x = 180, y = 40, width = 110, height = 20)
  378.  
  379.  
  380. N1_label = Label(text = 'N1', font = ("Times New Roman", 12))
  381. N1_label.place(x = 40, y = 75)
  382.  
  383. N1_label = Label(text = 'N2', font = ("Times New Roman", 12))
  384. N1_label.place(x = 150, y = 75)
  385.  
  386. N1_label = Label(text = 'N3', font = ("Times New Roman", 12))
  387. N1_label.place(x = 260, y = 75)
  388.  
  389. inp_window_1 = Entry(root, textvariable = inp_1, font = (
  390.     "Times New Roman", 13))
  391. inp_window_1.place(x = 20, y = 105, width = 60, height = 20)
  392.  
  393. inp_window_2 = Entry(root, textvariable = inp_2, font = (
  394.     "Times New Roman", 13))
  395. inp_window_2.place(x = 130, y = 105, width = 60, height = 20)
  396.  
  397. inp_window_3 = Entry(root, textvariable = inp_3, font = (
  398.     "Times New Roman", 13))
  399. inp_window_3.place(x = 240, y = 105, width = 60, height = 20)
  400.  
  401. plot = Button(root, text = 'Plot', font = ("Times New Roman", 13), command =
  402.               build_plot)
  403. plot.place(x = 20, y = 140, width = 60, height = 20)
  404.  
  405. table = Button(root, text = 'Table', font = ("Times New Roman", 13), command =
  406.               build_table)
  407. table.place(x = 240, y = 140, width = 60, height = 20)
  408.  
  409. example = Button(root, text = 'Sort example', font = ("Times New Roman", 13),
  410.                  command = sort_example)
  411. example.place(x = 100, y = 140, width = 120, height = 20)
  412.  
  413. inp_window_1.insert(END, 10)
  414. inp_window_2.insert(END, 100)
  415. inp_window_3.insert(END, 1000)
  416. inp_window_4.insert(END, 1000)
  417. inp_window_5.insert(END, 10000)
  418.  
  419. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement