Skip to content

Commit e144aeb

Browse files
committed
Fixed mergesort Visualization.
1 parent 92a183d commit e144aeb

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def get_random_array(length):
1111
return n
1212

1313

14-
array_size = 100
14+
array_size = 50
1515

1616
algorithms = [s.bubble_sort, s.heap_sort, s.selection_sort,
1717
s.insertion_sort, s.quick_sort, s.insertion_sort, s.merge_sort]

sorting.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,35 @@
55

66
class Array:
77

8+
full_array = None
9+
810
def plot(self):
911
if not test:
10-
vs.plot(self.values)
12+
vs.plot(Array.full_array)
1113

1214
def set_all(self, values):
1315
for i in range(len(self.values)):
1416
self.values[i] = values[i]
17+
for i in range(len(self.values)):
18+
Array.full_array[self.lower_index + i] = values[i]
1519
self.plot()
1620

17-
def __init__(self, values):
21+
def __init__(self, values, lower_index=0, higher_index=-1):
22+
self.lower_index = lower_index
23+
self.higher_index = len(values) if higher_index == -1 else higher_index
1824
self.values = list(values)
1925

26+
if Array.full_array == None:
27+
Array.full_array = list(values)
28+
2029
def swap(self, index1, index2):
2130
self.values[index2], self.values[index1] = self.values[index1], self.values[index2]
31+
Array.full_array[self.lower_index + index2], Array.full_array[self.lower_index + index1] = Array.full_array[self.lower_index + index1], Array.full_array[self.lower_index + index2]
2232
self.plot()
2333

2434
def set(self, index, num):
2535
self.values[index] = num
36+
Array.full_array[self.lower_index + index] = num
2637
self.plot()
2738

2839
def get_len(self):
@@ -110,13 +121,14 @@ def heapify(nums, heap_size, root_index):
110121
heapify(nums, i, 0)
111122

112123

113-
def merge_sort(nums): # n * logn
114-
124+
def merge_sort(nums, lower_index=0, higher_index=-1): # n * logn
125+
if higher_index == -1:
126+
higher_index = lower_index + nums.get_len()
115127
def merge(left_list, right_list):
116128
sorted_list = []
117129
left_list_index = right_list_index = 0
118130

119-
# We use the list lengths often, so its handy to make variables
131+
# We use the list lengths often, so it's handy to make variables
120132
left_list_length, right_list_length = len(left_list), len(right_list)
121133

122134
for _ in range(left_list_length + right_list_length):
@@ -154,8 +166,8 @@ def merge(left_list, right_list):
154166
mid = nums.get_len() // 2
155167

156168
# Sort and merge each half
157-
left_list = merge_sort(Array(nums.values[:mid]))
158-
right_list = merge_sort(Array(nums.values[mid:]))
169+
left_list = merge_sort(Array(nums.values[:mid], lower_index, mid))
170+
right_list = merge_sort(Array(nums.values[mid:], mid, nums.get_len()), mid, nums.get_len())
159171

160172
nums.set_all(left_list + right_list)
161173

visualizer.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@ def plot(arr):
99

1010

1111
def on_close(event):
12-
try:
12+
if not sys.argv[0] == 'test.py':
1313
sys.exit(0)
14-
except:
15-
pass
1614

1715

1816
def show():

0 commit comments

Comments
 (0)