def merge(a,b,m,e): l=a[b:m+1] r=a[m+1:e+1] k=b i=0 j=0 while i<len(l) and j<len(r): #change sign for Descending order if l[i]<r[j]: a[k]=l[i] i+=1 else: a[k]=r[j] j+=1 k+=1 while i<len(l): a[k]=l[i] i+=1 k+=1 while j<len(r): a[k]=r[j] j+=1 k+=1 return a def mergesort(a,b,e): """ >>> mergesort([3,2,1],0,2) [1, 2, 3] >>> mergesort([3,2,1,0,1,2,3,5,4],0,8) [0, 1, 1, 2, 2, 3, 3, 4, 5] """ if b<e: m = (b+e)//2 #print("ms1",a,b,m) mergesort(a,b,m) #print("ms2",a,m+1,e) mergesort(a,m+1,e) #print("m",a,b,m,e) merge(a,b,m,e) return a if __name__ == "__main__": import doctest doctest.testmod()