I am trying to implement merge sort by using only one 1 auxiliary array instead of creating a new array for left and right in recursive routine. because that could lead to extensive cost of extra array creation. And you'll sometimes see Mergesort performing poorly because of that bug.
I am trying to implement merge sort as described in this course here - https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort (minute 7 -10).
I am currently facing RecursionError
I have already written the code in python (with huge help from other people in this community). Here it is -
class merge_sort:
aux_array = []
def __init__(self, data):
self.data = data
self.aux_array = [0 for i in range(len(data))]
def merge(self, low, mid, high):
for k in range(low, high):
self.aux_array[k] = self.data[k]
if( low == high):
self.data[low] = self.aux_array[low]
return
i = low
j = mid + 1
for k in range(low, high):
if(i > mid):
self.data[k] = self.aux_array[j]
j = j + 1
elif(j > high):
self.data[k] = self.aux_array[i]
i = i + 1
elif(self.aux_array[i] < self.aux_array[j]):
self.data[k] = self.aux_array[i]
i = i + 1
else:
self.data[k] = self.aux_array[j]
j = j + 1
return
def mergesort(self,low, high):
if(low < high):
mid = (high - low)//2
self.mergesort(low, mid)
self.mergesort(mid+1, high)
self.merge(low, mid, high)
else:
return
def start_sort(self):
high = len(self.data) - 1
self.mergesort(0, high)
arr = [10, 2, 30, 0, 4]
arr1 = merge_sort(arr)
arr1.start_sort()
print(arr1)
This is the exact error -
Traceback (most recent call last):
File "new_sorting.py", line 55, in <module>
arr1.start_sort()
File "new_sorting.py", line 49, in start_sort
self.mergesort(0, high)
File "new_sorting.py", line 42, in mergesort
self.mergesort(mid+1, high)
File "new_sorting.py", line 42, in mergesort
self.mergesort(mid+1, high)
File "new_sorting.py", line 42, in mergesort
self.mergesort(mid+1, high)
[Previous line repeated 993 more times]
File "new_sorting.py", line 41, in mergesort
self.mergesort(low, mid)
File "new_sorting.py", line 39, in mergesort
if(low < high):
RecursionError: maximum recursion depth exceeded in comparison