In [172]:
import sys
def merge(A, low, mid, high):
leftSide = A[low:mid] + [sys.maxsize] # using maxsize as a sentinel value
rightSide = A[mid:high] + [sys.maxsize] # assumes maxsize would never be in the array
while (low < high):
if (leftSide[0] <= rightSide[0]):
A[low] = leftSide[0]
leftSide = leftSide[1:]
else:
A[low] = rightSide[0]
rightSide = rightSide[1:]
low = low + 1
def sort(A, low, high):
if high - low > 1:
mid = (low + high)//2
sort(A, low, mid)
sort(A, mid, high)
merge(A, low, mid, high)
In [173]:
Z = [6, 5, 4, 3, 2, 1]
low, high = 0, len(Z)
sort(Z, low, high)
print("final result Z=", Z)
In [ ]: