def merge(arr,l,m,r):
lenA=m-l+1
lenB=r-m
A=[0]*lenA
B=[0]*lenB
for i in range(lenA):
A[i]=arr[l+i]
for i in range(lenB):
B[i]=arr[m+1+i]
i=0
j=0
k=l
while i<lenA and j<lenB:
if A[i] <= B[j]:
arr[k]=A[i]
i=i+1
k=k+1
else:
arr[k] = B[j]
j=j+1
k=k+1
if i ==lenA:
while j < lenB:
arr[k] = B[j]
j = j + 1
k = k + 1
if j ==lenB:
while i<lenA:
arr[k] = A[i]
i = i + 1
k = k + 1
def mergeSort(arr,l,r):
if l < r:
m=(l+r)//2
mergeSort(arr,l,m)
mergeSort(arr,m+1,r)
merge(arr,l,m,r)
else:
return
if __name__ == '__main__':
arr=[12, 11, 13, 5, 6, 7, 1]
n=len(arr)
mergeSort(arr,0,n-1)
print(arr)