From dec62b525deb7877a0a62794b7e4a4b487110c8a Mon Sep 17 00:00:00 2001
From: AntonioBerna
+ +
+ + +## MergeSort + ++ +
+ +## QuickSort + ++ +
+ +## SelectionSort + ++ +
diff --git a/SortingAlgorithms/gui.py b/SortingAlgorithms/gui.py new file mode 100644 index 0000000..1dcf82c --- /dev/null +++ b/SortingAlgorithms/gui.py @@ -0,0 +1,104 @@ +import matplotlib.animation as animation +import matplotlib.pyplot as plt +from tkinter import messagebox +from sort import Algorithms +import tkinter as tk +import random +import time + + +class Window(tk.Tk): + def __init__(self): + super().__init__() + self.title("Sorting Algorithms - Clever Code") + # self.resizable(False, False) + + self.frame = tk.Frame() + self.frame.pack() + self.n_label = tk.Label(self.frame, text="n:", font=("Cascadia Code", "15")) + self.n_label.grid(row=0, column=0, padx=10, pady=10) + self.n_entry = tk.Entry(self.frame, justify="center", font=("Cascadia Code", "15")) + self.n_entry.grid(row=0, column=1, padx=10, sticky="E") + + self.sort_frame = tk.Frame() + self.sort_frame.pack() + self.radio_value = tk.IntVar() + self.radio_value.set(-1) + self.bubble_sort = tk.Radiobutton(self.sort_frame, text="BubbleSort", variable=self.radio_value, value=0) + self.bubble_sort.grid(row=0, column=0, padx=10, sticky="W") + self.insertion_sort = tk.Radiobutton(self.sort_frame, text="InsertionSort", variable=self.radio_value, value=1) + self.insertion_sort.grid(row=0, column=1, padx=10, sticky="W") + self.merge_sort = tk.Radiobutton(self.sort_frame, text="MergeSort", variable=self.radio_value, value=2) + self.merge_sort.grid(row=1, column=0, padx=10, sticky="W") + self.quick_sort = tk.Radiobutton(self.sort_frame, text="QuickSort", variable=self.radio_value, value=3) + self.quick_sort.grid(row=1, column=1, padx=10, sticky="W") + self.selection_sort = tk.Radiobutton(self.sort_frame, text="SelectionSort", variable=self.radio_value, value=4) + self.selection_sort.grid(row=2, columnspan=2, padx=10) + + self.button_frame = tk.Frame() + self.button_frame.pack() + self.reset_button = tk.Button(self.button_frame, text="Reset", font=("Cascadia Code", "15"), command=self.resetWindow) + self.reset_button.grid(row=0, column=0, padx=10, pady=10, sticky="WE") + self.start_button = tk.Button(self.button_frame, text="Start", font=("Cascadia Code", "15"), command=self.setAlgorithm) + self.start_button.grid(row=0, column=1, padx=10, pady=10, sticky="WE") + + def resetWindow(self): + self.n_entry.delete(0, tk.END) + self.radio_value.set(-1) + + def __checkAll(self): + try: + if self.radio_value.get() in [i for i in range(0, 5)] and int(self.n_entry.get()): + return True + except ValueError: + return False + + def setAlgorithm(self): + if self.__checkAll(): + N = int(self.n_entry.get()) + A = [x + 1 for x in range(N)] + random.seed(time.time()) + random.shuffle(A) + + algo = Algorithms() + if self.radio_value.get() == 0: + self.title = "BubbleSort" + self.generator = algo.bubblesort(A) + elif self.radio_value.get() == 1: + self.title = "InsertionSort" + self.generator = algo.insertionsort(A) + elif self.radio_value.get() == 2: + self.title = "MergeSort" + self.generator = algo.mergesort(A, 0, N - 1) + elif self.radio_value.get() == 3: + self.title = "QuickSort" + self.generator = algo.quicksort(A, 0, N - 1) + else: + self.title = "SelectionSort" + self.generator = algo.selectionsort(A) + + self.showFigure(A, N) + else: + messagebox.showerror("Si รจ verificato un errore", "Valori Inseriti Non Validi!") + + def updateFigure(self, A, rects, iteration): + for rect, val in zip(rects, A): + rect.set_height(val) + iteration[0] += 1 + self.text.set_text("# of Operations: {}".format(iteration[0])) + + def showFigure(self, A, N): + fig, ax = plt.subplots() + ax.set_title(self.title) + bar_rects = ax.bar(range(len(A)), A, align="edge") + ax.set_xlim(0, N) + ax.set_ylim(0, int(1.07 * N)) + self.text = ax.text(0.02, 0.95, "", transform=ax.transAxes) + + iteration = [0] + anim = animation.FuncAnimation(fig, func=self.updateFigure, fargs=(bar_rects, iteration), frames=self.generator, interval=1, repeat=False) + plt.show() + +if __name__ == "__main__": + window = Window() + window.mainloop() \ No newline at end of file diff --git a/SortingAlgorithms/imgs/BubbleSort.png b/SortingAlgorithms/imgs/BubbleSort.png new file mode 100644 index 0000000000000000000000000000000000000000..c7aad256575aac2bcbdf74223d95d42fe8555a39 GIT binary patch literal 431655 zcmeFYXIK+a*EWixfQl4R0TDt`u}}o0m#C!|xFCoOCb#f#O%Vp@5e1%1UU9*>wdoIzbgS<0tf
zGrMsJz9*$R{n}YQle+T<4o4iilp5ICH+RzScqsgH#!s`zbCH&>ubet2^z6#Tov!eA
zd45T2IhC?!_o?l@9e@8^Q0%j~>R7?p2GPT@_hR+pz4!F)Ro>qy8)g}BGg0>av3aHT
zJ>x1jjtr@2DQTUs*r&aJLo`KPRRpdaX^*nns`&cY^zr7jjx?RazL%X7 $mG|t9sT#f3&pB$l*
zq#~{4f867^%~67l5s>4LntI$4*S@nYo)vGY7^(=nQD=j>=6+)z`fJ`reQKrNhdL%S
zda9 W+MzD#amM<2CUYG!Y>y^Sm?K*gSTgff@jv+B|Hgd!iC(DHy*w9{&B(13d3a!
zff-2_;luDCj%zeABbX>E#YEkKft<)o*GCMA5UA1UZVL1pTiAO%UiU8vM58!%Nl9#|dzwGk1F3<2s)`DG3~O
zKIqHmZ#(%f0dodSQ8KgK0Q)3JbB`iU-0ZZh=8nO%EtXs7L?1E@k7t+X*vvG)SDi#F
zeb9#eIfW!v0=urpA)}i0Eo~n}holZwBp6X_3QBI?od4x+iLkkgQ8ODu0rImg=EdG#
z(5aBqSvPk*iGk`*jH`NhSv+e`i)@cf0J2%H^kDs!;0^!)f(BdZ8Hyt`oPuHH&oQR$
zD;+m{iwh7S*I_?z2;Bp43pBmLZWfH5IiEAzDB!-l!222fOkGsP;s{52bBI-}CAOsJ
zlib4-g+p)jl}ei0gAXN)V?MN2uCra(v@Eu1ttwLXB^-SNZ+DI6b%7irnEG1Ku=tQU
zDG@4^#^4RlLNTi5x8k7$uqld{5JzFgBqS?q&VmFTSGj8z6`SMV>^htGLlk^#aEp32
zIIc0|C!b$Ra^Gq~O-Tkn0_E-e>E1L=Ue_$l{x+{zTw-JJu|87F_;$GCB
z({o!2A3X$p3rerH$fx}Jw?;cIA9V3{45Uk+YtF|_-E_&3?q4xKT>GmVP4>&E
>8Z`o1!DK6s5Lhc0J?=kZ{!oLX@C42GUZ@yp|T(pMH~j
9PK&&V<`)wjyc(lZDQHLyH&^;zl&
zJmqmtI^7@~-b0>Rdtcq55vnPPti-m%6n@7PfmTIc{!1=|+M9eHE8Ja0(-d&cht`;)
zNgnI@*j^i92rFASMa=97-6)jEvTu3ow7v94jIP>YjoABBRre^2nQZ@>259zyWBS$X
z=k=Z@Pp7}^Za)FZ*4`Uuo#^gi{!=yk4Neo?-A#l{0@MEJOPv8JWpgWQi;*Gqp6Ez)
zEmF2s24h5RZ_JtBlLV+Hq1m&o|AK@3XZO^wk$3>mTIc$S*0~>$Z#Odnq-{H|(GM-A
zMI8BXp_dh~fnQmKMXp?5DQv~5Cb<{m$0SK^?A%6R$_$u@aK7DChJ|%k4Oo37r9wH?
zs%wKze3t8~T>N!g-7X#5s;=r{kmdL0&u@yKFaN=CPhNFe)Q^W9?XRdK8z;Sgro2Sx
zCwi8WC^C;P4qG(E+i=S^79d*Nf5aAGtdY(WW!UGhwPRx{us%b}H9*f9Z&`8DgvYo_
zj*=rhX3~~cC#P9OE-_*ok>Asgd`t1Om4tgX17kwQ-lZLUBlL>94I^EGqHnJH8v395
z1E;QCZv^cgTfvu@ghrNdkxb-~uE=B`K#}i?=31M%Q?>+fC~Kd)8!G%3$ZGoOWb@sj
z=;x0gmZX`!W#H4I28tR#pJ?QKW=Ry6$xwG*e?ShEva9zFXltX4>xq7e_5DlGNw@Q<
z6Jf!)HU$C#mxhZi*y{)yvwe{YHC;c`bUe8fO${wSp&M$dRo*obfAue&VU9&>zc&SH
z%DA6lJ{+^*A=L;xzWGo_Ibq#6>Hl!b|Gb|6^y5V+z^;G27nU