Skip to content

Commit 7cd99a7

Browse files
Merge pull request #2077 from MisterMickey/issue-1896
add sortingAlgoVisualizer
2 parents 4a217d0 + 3b3d8b6 commit 7cd99a7

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
from tkinter import *
2+
from tkinter import ttk
3+
from random import *
4+
import time
5+
6+
7+
win = Tk()
8+
win.geometry("1340x600+10+10")
9+
win.title("Sorting Algorithm Visualizer")
10+
win.config(bg = "black")
11+
win.resizable(0,0)
12+
13+
data = []
14+
15+
f1 = Frame(win,width=1300, height=100, bg="#e6a64e")
16+
f1.grid(row=0, column=0, padx=15, pady=10)
17+
can = Canvas(win, width=1330, height=470, bg="grey")
18+
can.grid(row=1, column=0)
19+
20+
21+
def main(data,carr):
22+
can.delete("all")
23+
cheight = 470
24+
cwidth = 1330
25+
bwidth = cwidth/(len(data)+1)
26+
offset = 5
27+
spacing = 0
28+
normdata = [i/max(data) for i in data]
29+
for i,height in enumerate(normdata):
30+
x1 = i*bwidth+offset+spacing
31+
y1 = cheight-height*370
32+
x2 = (i+1)*bwidth+offset
33+
y2 = cheight
34+
can.create_rectangle(x1,y1,x2,y2, fill=carr[i])
35+
# can.create_text(x1+0.2,y1,anchor=SW,text=str(data[i]))
36+
win.update_idletasks()
37+
38+
def Generate():
39+
global data
40+
data=[]
41+
size = int(e1.get())
42+
min = int(e2.get())
43+
max = int(e3.get())
44+
for i in range(size):
45+
data.append(randrange(min,max+1))
46+
# data = [22, 11, 34, 23, 44, 33, 9, 30, 31, 30, 42, 39, 40, 23, 34, 32, 31, 46, 15, 43, 9, 1, 23, 22, 41, 32, 31, 39, 38, 16, 24, 24, 31, 12, 42, 16, 23, 28, 4, 22, 47, 25, 3, 2, 38, 25, 18, 20, 50, 41]
47+
main(data,["white" for x in range(len(data))])
48+
49+
50+
def BubbleSort(arr,main,sspeed):
51+
l = len(arr)
52+
for i in range(l,1,-1) :
53+
for j in range(i) :
54+
if j+1 < i :
55+
if arr[j] > arr[j+1]:
56+
arr[j],arr[j+1] = arr[j+1],arr[j]
57+
main(arr,["red" if x==j or x==j+1 else "white" for x in range(len(data))])
58+
time.sleep(sspeed)
59+
main(arr,["green" for x in range(len(data))])
60+
61+
def SelectionSort(arr,main,sspeed):
62+
l = len(arr)
63+
for i in range(l):
64+
mini = i
65+
for j in range(i+1,l):
66+
if arr[j] < arr[mini]:
67+
mini = j
68+
main(arr,["red" if x==mini else "white" for x in range(len(data))])
69+
time.sleep(sspeed)
70+
if mini != i:
71+
arr[mini], arr[i] = arr[i], arr[mini]
72+
main(arr,["red" if x==i or x==mini else "white" for x in range(len(data))])
73+
time.sleep(sspeed)
74+
main(arr,["green" for x in range(len(data))])
75+
76+
77+
def MainMS(data,main,sspeed):
78+
79+
def merge(arr, l, m, r):
80+
n1 = m - l + 1
81+
n2 = r - m
82+
83+
L = [0] * (n1)
84+
R = [0] * (n2)
85+
86+
87+
for i in range(0, n1):
88+
L[i] = arr[l + i]
89+
90+
for j in range(0, n2):
91+
R[j] = arr[m + 1 + j]
92+
93+
94+
i = 0
95+
j = 0
96+
k = l
97+
98+
while i < n1 and j < n2:
99+
if L[i] <= R[j]:
100+
arr[k] = L[i]
101+
i += 1
102+
else:
103+
arr[k] = R[j]
104+
j += 1
105+
main(arr,["red" if x==k else "white" for x in range(len(data))])
106+
time.sleep(sspeed)
107+
k += 1
108+
109+
110+
while i < n1:
111+
arr[k] = L[i]
112+
i += 1
113+
k += 1
114+
115+
while j < n2:
116+
arr[k] = R[j]
117+
j += 1
118+
k += 1
119+
120+
121+
def mergeSort(arr, l, r):
122+
if l < r:
123+
m = l+(r-l)//2
124+
mergeSort(arr, l, m)
125+
mergeSort(arr, m+1, r)
126+
merge(arr, l, m, r)
127+
128+
129+
if __name__ == "__main__":
130+
mergeSort(data,0,int(len(data)-1))
131+
main(data,["green" for x in range(len(data))])
132+
133+
134+
def InsertionSort(arr,main,sspeed):
135+
l = len(arr)
136+
for i in range(1,l):
137+
temp = arr[i]
138+
j=i-1
139+
main(arr,["red" if x==j else "white" for x in range(len(data))])
140+
time.sleep(sspeed)
141+
while j >= 0 and arr[j] > temp:
142+
arr[j+1] = arr[j]
143+
main(arr,["red" if x==j or x==j+1 else "white" for x in range(len(data))])
144+
j-=1
145+
arr[j+1] = temp
146+
main(arr,["red" if x==j+1 else "white" for x in range(len(data))])
147+
time.sleep(sspeed)
148+
main(arr,["green" for x in range(len(data))])
149+
150+
def MyInS(arr,main,sspeed):
151+
l = len(arr)
152+
for i in range(1,l):
153+
for j in range(i,-1,-1):
154+
if arr[j] < arr[j-1] and j!=0:
155+
arr[j], arr[j-1] = arr[j-1], arr[j]
156+
main(arr,["red" if x==j or x==j+1 else "white" for x in range(len(data))])
157+
time.sleep(sspeed)
158+
main(arr,["green" for x in range(len(data))])
159+
160+
def start():
161+
global data
162+
algorithm = algo.get()
163+
speed = float(e4.get())
164+
if algorithm == "Bubble Sort":
165+
BubbleSort(data,main,speed)
166+
elif algorithm == "Selection Sort":
167+
SelectionSort(data,main,speed)
168+
elif algorithm == "Insertion Sort":
169+
InsertionSort(data,main,speed)
170+
elif algorithm == "Merge Sort":
171+
MainMS(data,main,speed)
172+
elif algorithm == "My InS":
173+
MyInS(data,main,speed)
174+
175+
l1 = Label(f1,text="Algorithms : ", bg="#e6a64e").grid(row=0, column=0, sticky=W,pady=5, padx=5)
176+
algo = ttk.Combobox(f1, values=["Bubble Sort","Selection Sort", "My InS","Insertion Sort","Merge Sort"])
177+
algo.grid(row=0, column=1,pady=5, padx=5)
178+
algo.current(0)
179+
bttn1 = Button(f1,text = "Generate", command=Generate)
180+
bttn1.grid(row=0,column=4,pady=5, padx=5)
181+
182+
l2 = Label(f1,text="Size : ", bg="#e6a64e").grid(row=1, column=0, sticky=W,pady=5, padx=5)
183+
e1 = Entry(f1, textvariable=IntVar())
184+
e1.grid(row=1,column=1,pady=5, padx=5)
185+
186+
l3 = Label(f1,text="Min Value : ", bg="#e6a64e").grid(row=1, column=2, sticky=W,pady=5, padx=5)
187+
e2 = Entry(f1, textvariable=IntVar())
188+
e2.grid(row=1,column=3,pady=5, padx=5)
189+
190+
l4 = Label(f1,text="Max Value : ", bg="#e6a64e").grid(row=1, column=4, sticky=W,pady=5, padx=5)
191+
e3 = Entry(f1, textvariable=IntVar())
192+
e3.grid(row=1,column=5,pady=5, padx=5)
193+
194+
l5 = Label(f1,text="Speed : ", bg="#e6a64e").grid(row=0, column=2, sticky=W,pady=5, padx=5)
195+
e4 = Entry(f1,textvariable=IntVar())
196+
e4.grid(row=0,column=3,pady=5, padx=5)
197+
198+
bttn2 = Button(f1, text="START SORTING",command=start)
199+
bttn2.grid(row=0,column=5,pady=5, padx=5)
200+
201+
202+
win.mainloop()

0 commit comments

Comments
 (0)