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)


final result Z= [1, 2, 3, 4, 5, 6]

In [ ]: