def merge_sort(arr) :
n = len(arr)
if n <= 1 :
return arr
mid = n//2
return merge(merge_sort(arr[:mid]), merge_sort(arr[mid:]))
def merge(arr1, arr2) :
result = []
while (len(arr1) > 0) and (len(arr2) > 0) :
if arr1[0] < arr2[0] :
result.append(arr1[0])
arr1 = arr1[1:]
else:
result.append(arr2[0])
arr2 = arr2[1:]
result.extend(arr1)
result.extend(arr2)
return result
print(merge_sort([10,7,5,15,3,8,9,5,10,3,1]))
ZGVmIG1lcmdlX3NvcnQoYXJyKSA6CiAgICBuID0gbGVuKGFycikKICAgIGlmIG4gPD0gMSA6CiAgICAgICAgcmV0dXJuIGFycgogICAgbWlkID0gbi8vMgogICAgcmV0dXJuIG1lcmdlKG1lcmdlX3NvcnQoYXJyWzptaWRdKSwgbWVyZ2Vfc29ydChhcnJbbWlkOl0pKQoKZGVmIG1lcmdlKGFycjEsIGFycjIpIDoKICAgIHJlc3VsdCA9IFtdCiAgICB3aGlsZSAobGVuKGFycjEpID4gMCkgYW5kIChsZW4oYXJyMikgPiAwKSA6CiAgICAgICAgaWYgYXJyMVswXSA8IGFycjJbMF0gOgogICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFycjFbMF0pCiAgICAgICAgICAgIGFycjEgPSBhcnIxWzE6XQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXJyMlswXSkKICAgICAgICAgICAgYXJyMiA9IGFycjJbMTpdCiAgICAgICAgICAgIAogICAgcmVzdWx0LmV4dGVuZChhcnIxKQogICAgcmVzdWx0LmV4dGVuZChhcnIyKQogICAgcmV0dXJuIHJlc3VsdAogICAKcHJpbnQobWVyZ2Vfc29ydChbMTAsNyw1LDE1LDMsOCw5LDUsMTAsMywxXSkp
[1, 3, 3, 5, 5, 7, 8, 9, 10, 10, 15]