In [50]:
def merge(A, p, q, r):
n1 = q - p + 1
n2 = r - q
L, R = [], []
for i in range(n1):
L.append(A[p + i - 1])
for j in range(n2):
R.append(A[q + j])
i, j = 0, 0
for k in range(p - 1, r):
if i < len(L) and (j >= len(R) or L[i] <= R[j]):
A[k] = L[i]
i = i + 1
else:
A[k] = R[j]
j = j + 1
In [57]:
from math import floor
def mergeSort(A, p, r):
if p < r:
q = floor((p + r)/2)
mergeSort(A, p, q)
mergeSort(A, q + 1, r)
merge(A, p, q, r)
In [58]:
A = [5, 4, 3, 2, 1, 0, -1]
print(A)
mergeSort(A, 1, len(A))
print(A)
In [ ]: