@@ -60,7 +60,12 @@ def __init__(self, root, title) -> None:
60
60
self .display (self .N ,self .data ,self .colours )
61
61
62
62
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
+
64
69
self .canvas .delete ('all' )
65
70
width = (2 * (780 / N ))// 3
66
71
gap = (780 / N )// 3
@@ -202,14 +207,14 @@ def shuffle(self):
202
207
self .display (self .N ,self .data ,self .colours )
203
208
# print(self.data)
204
209
205
- def start (self ):
210
+ def start (self , T = 0.2 ):
206
211
if self .st ['bubble' ] is True :
207
212
for i in range (self .N - 1 ):
208
213
for j in range (self .N - 1 - i ):
209
214
if self .data [j ]> self .data [j + 1 ]:
210
215
self .data [j ],self .data [j + 1 ]= self .data [j + 1 ],self .data [j ]
211
216
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 )
213
218
self .display (self .N ,self .data ,['green' for _ in range (self .N )])
214
219
215
220
elif self .st ['insertion' ] is True :
@@ -220,7 +225,7 @@ def start(self):
220
225
self .data [i + 1 ]= self .data [i ]
221
226
i -= 1
222
227
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 )
224
229
self .data [i + 1 ]= key
225
230
self .display (self .N ,self .data ,['green' for _ in range (self .N )])
226
231
@@ -231,14 +236,17 @@ def start(self):
231
236
for j in range (i + 1 ,len (self .data )):
232
237
if self .data [min_index ]> self .data [j ]:
233
238
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 )
235
240
min_index = j
236
241
if min_index != i :
237
242
self .data [i ], self .data [min_index ]= self .data [min_index ],self .data [i ]
238
243
self .display (self .N ,self .data ,['green' for _ in range (self .N )])
239
244
240
245
241
246
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
+
242
250
pass
243
251
244
252
elif self .st ['quick' ] is True :
@@ -252,7 +260,51 @@ def start(self):
252
260
pass
253
261
254
262
# 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
+ #---------------------------------------------------------------------------
256
308
257
309
win = Style (theme = 'cyborg' ).master
258
310
obj = window (win , 'Sorting Algorithm Visualizer' )
0 commit comments