Skip to content

Commit 9330905

Browse files
Merge pull request #5 from CoolSpy3/master
Bug fixes and Miracle Sort
2 parents c33a317 + abbc54d commit 9330905

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

Algorithms/Sorting.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ def insertion_sort(arr, event, aux = None):
4545
'''
4646
def quick_sort(arr, event, aux = None):
4747
quick_sort_method(arr, event, 0, arr.length())
48-
finish(arr)
48+
if not event.is_set():
49+
finish(arr)
4950

5051
def quick_sort_method(arr, event, begin, end):
5152
if (begin < end):
@@ -74,7 +75,8 @@ def quick_sort_method(arr, event, begin, end):
7475
'''
7576
def merge_sort(arr, event, aux = None):
7677
merge_sort_method(arr, event, 0, arr.length())
77-
finish(arr)
78+
if not event.is_set():
79+
finish(arr)
7880

7981
def merge_sort_method(arr, event, begin, end):
8082
if (begin+1 < end):
@@ -367,10 +369,10 @@ def counting_sort(arr, event, aux):
367369
'''
368370
def is_sorted(arr, event):
369371
for i in range(0, arr.length() - 1):
370-
if (arr.get(i) > arr.get(i + 1)):
371-
return -1
372372
if (event.is_set()):
373373
return 0
374+
if (arr.get(i) > arr.get(i + 1)):
375+
return -1
374376
return 1
375377

376378
def shuffle(arr, event):
@@ -393,6 +395,15 @@ def bogo_sort(arr, event, aux = None):
393395
if (num == 1):
394396
finish(arr)
395397

398+
def miracle_sort(arr, event, aux = None):
399+
while True:
400+
status = is_sorted(arr, event)
401+
if status == 1:
402+
finish(arr)
403+
return
404+
if status == 0:
405+
return
406+
396407
# Sorting Algorithm Input
397408
class SA:
398409
''' name = how it will appear on the dropdown menu
@@ -403,4 +414,4 @@ def __init__(self, name, sort):
403414
self.sort = sort
404415

405416
sorting_algos = [SA("Selection Sort", selection_sort), SA("Insertion Sort", insertion_sort), SA("Quick Sort", quick_sort), SA("Merge Sort", merge_sort),
406-
SA("Heap Sort", heap_sort), SA("Radix Sort", radix_sort), SA("Counting Sort", counting_sort), SA("Bogo Sort", bogo_sort)]
417+
SA("Heap Sort", heap_sort), SA("Radix Sort", radix_sort), SA("Counting Sort", counting_sort), SA("Bogo Sort", bogo_sort), SA("Miracle Sort", miracle_sort)]

UI/UI.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import threading
22
import time
3+
import tkinter
4+
from tkinter import filedialog
35

46
import Algorithms.Sorting as Sorting
57
import pygame
68

79
import UI.Wrapper as Wrapper
810
from UI.Arrays import Array
911

10-
import tkinter
11-
from tkinter import filedialog
12-
1312
''' This should only have code concerning the UI duh
1413
Specifically the display of screens, and functions for input (button presses)
1514
Everything here should just to be to display stuff and inputs
@@ -237,6 +236,18 @@ def update(self):
237236

238237
def on_reset(self):
239238
self.window.event.set()
239+
self.set_sorting_thread(None)
240+
241+
def set_sorting_thread(self, thread):
242+
if self.sorting_thread is not None:
243+
self.window.event.set()
244+
self.sorting_thread.join()
245+
self.window.event.clear()
246+
self.sorting_thread = thread
247+
248+
def sort_done(self):
249+
self.sorting_thread = None
250+
self.window.event.set()
240251

241252
def display_sorting(self, screen_group, options_screen_group, slide_in = True):
242253
self.scroll_bar = []
@@ -258,26 +269,15 @@ def display_sorting(self, screen_group, options_screen_group, slide_in = True):
258269

259270
screen_group.add(Wrapper.Text(Wrapper.DefaultText.text("Sorting", Wrapper.FontSizes.TITLE_SIZE), (self.window.window.get_size()[0]/2, self.TITLE_Y), self.window, slide_in))
260271
screen_group.add(Wrapper.Background((self.MARGIN_X + self.SORTING_WIDTH/2, self.SORTING_Y), (self.SORTING_WIDTH, self.SORTING_HEIGHT), Wrapper.Colors.SMALL_BACKGROUND_COLOR, self.window, None, False))
261-
262-
def set_sorting_thread(thread):
263-
if self.sorting_thread is not None:
264-
self.window.event.set()
265-
self.sorting_thread.join()
266-
self.window.event.clear()
267-
self.sorting_thread = thread
268-
269-
def sort_done():
270-
self.sorting_thread = None
271-
self.window.event.set()
272272

273273
self.sorting_thread = None
274274

275275
buttons = []
276276
resets = []
277277
def bind_function(sort_input):
278278
def func():
279-
sort_algo = Wrapper.sequential_functions(Wrapper.add_args_to_func(sort_input.sort, self.array, self.window.event, self.aux_array), sort_done)
280-
set_sorting_thread(threading.Thread(target=sort_algo))
279+
sort_algo = Wrapper.sequential_functions(Wrapper.add_args_to_func(sort_input.sort, self.array, self.window.event, self.aux_array), self.sort_done)
280+
self.set_sorting_thread(threading.Thread(target=sort_algo))
281281
return self.sorting_thread.start()
282282
func.__name__ = sort_input.name
283283
return func

0 commit comments

Comments
 (0)