Skip to content

Commit f564e3e

Browse files
committed
merge 0.1
1 parent 9309473 commit f564e3e

File tree

1 file changed

+58
-6
lines changed

1 file changed

+58
-6
lines changed

algo_visualizer.py

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,12 @@ def __init__(self, root, title) -> None:
6060
self.display(self.N,self.data,self.colours)
6161

6262

63-
def display(self,N,a,rong):
63+
def display(self,N: int,a: list,rong: list):
64+
'''
65+
N = number of rectangles
66+
a = array of heights of rectangles
67+
rong = array of colours of each and every rectangle'''
68+
6469
self.canvas.delete('all')
6570
width=(2*(780/N))//3
6671
gap=(780/N)//3
@@ -202,14 +207,14 @@ def shuffle(self):
202207
self.display(self.N,self.data,self.colours)
203208
# print(self.data)
204209

205-
def start(self):
210+
def start(self,T=0.2):
206211
if self.st['bubble'] is True:
207212
for i in range(self.N-1):
208213
for j in range(self.N-1-i):
209214
if self.data[j]>self.data[j+1]:
210215
self.data[j],self.data[j+1]=self.data[j+1],self.data[j]
211216
self.display(self.N,self.data,['purple' if a==j or a==j+1 else 'green' if a>self.N-1-i else 'blue' for a in range(self.N)])
212-
time.sleep(0.02)
217+
time.sleep(T)
213218
self.display(self.N,self.data,['green' for _ in range(self.N)])
214219

215220
elif self.st['insertion'] is True:
@@ -220,7 +225,7 @@ def start(self):
220225
self.data[i+1]=self.data[i]
221226
i-=1
222227
self.display(self.N,self.data,['purple' if a==j or a==j+1 else 'green' if a<=j else'blue' for a in range(self.N)])
223-
time.sleep(0.02)
228+
time.sleep(T)
224229
self.data[i+1]=key
225230
self.display(self.N,self.data,['green' for _ in range(self.N)])
226231

@@ -231,14 +236,17 @@ def start(self):
231236
for j in range(i+1,len(self.data)):
232237
if self.data[min_index]>self.data[j]:
233238
self.display(self.N,self.data,['purple' if a==j else 'green' if a<=i else 'blue' for a in range(self.N)])
234-
time.sleep(0.2)
239+
time.sleep(T)
235240
min_index=j
236241
if min_index!=i:
237242
self.data[i], self.data[min_index]=self.data[min_index],self.data[i]
238243
self.display(self.N,self.data,['green' for _ in range(self.N)])
239244

240245

241246
elif self.st['merge'] is True:
247+
self.data=self.mergesort(self.data)
248+
self.display(self.N,self.data,['green' for _ in range(self.N)])
249+
242250
pass
243251

244252
elif self.st['quick'] is True:
@@ -252,7 +260,51 @@ def start(self):
252260
pass
253261

254262
# print(self.data)
255-
263+
264+
#----------------------------------------------------------------------
265+
def mergeelements(self,l,r):
266+
267+
i,j=0,0
268+
b=[]
269+
while i<len(l) and j<len(r):
270+
if l[i]<r[j]:
271+
b.append(l[i])
272+
i+=1
273+
# self.display(self.N,b+self.data[len(b):],['green' if x<len(b) else 'purple' for x in range(self.N) ])
274+
# time.sleep(0.2)
275+
else:
276+
b.append(r[j])
277+
j+=1
278+
# self.display(self.N,b+self.data[len(b):],['green' if x<len(b) else 'purple' for x in range(self.N) ])
279+
# time.sleep(0.2)
280+
281+
while i<len(l):
282+
b.append(l[i])
283+
i+=1
284+
# self.display(self.N,b+self.data[len(b):],['green' if x<len(b) else 'purple' for x in range(self.N) ])
285+
# time.sleep(0.2)
286+
287+
while j<len(r):
288+
b.append(r[j])
289+
j+=1
290+
# self.display(self.N,b+self.data[len(b):],['green' if x<len(b) else 'purple' for x in range(self.N) ])
291+
# time.sleep(0.2)
292+
293+
return b
294+
295+
296+
def mergesort(self,a):
297+
size=len(a)
298+
if size<2:
299+
return a
300+
mid=size//2
301+
l=a[:mid]
302+
r=a[mid:]
303+
l=self.mergesort(l)
304+
r=self.mergesort(r)
305+
return self.mergeelements(l,r)
306+
307+
#---------------------------------------------------------------------------
256308

257309
win = Style(theme='cyborg').master
258310
obj = window(win, 'Sorting Algorithm Visualizer')

0 commit comments

Comments
 (0)