Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7cd99a7

Browse files
Merge pull request avinashkranjan#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)

AltStyle によって変換されたページ (->オリジナル) /