fork download
  1. def mergeArr(a,b):
  2. la=len(a)
  3. lb=len(b)
  4. r=[]
  5. ia=ib=0
  6. while(True):
  7. if (ib>=lb):
  8. for ja in range(ia,la):
  9. r+=[a[ja]]
  10. break
  11. if (ia>=la):
  12. for jb in range(ib,lb):
  13. r+=[b[jb]]
  14. break
  15. if (a[ia]>b[ib]):
  16. r+=[b[ib]]
  17. ib+=1
  18. else:
  19. r+=[a[ia]]
  20. ia+=1
  21. return r
  22.  
  23. def mkA(arr):
  24. r=[]
  25. for a in arr:
  26. r+=[[a]]
  27. return r
  28.  
  29. def mergeSort(arr):
  30. tmp=mkA(arr)
  31. while(True):
  32. res=[]
  33. print(str(tmp))
  34. l=len(tmp)
  35. if l==1:
  36. return tmp[0]
  37. i=0
  38. while (i+1<=l-1):
  39. res+=[mergeArr(tmp[i],tmp[i+1])]
  40. i+=2
  41. if i==l-1:
  42. res+=[tmp[l-1]]
  43. tmp=res
  44.  
  45. x=mergeSort([1,2,3,1,2,3,1,2,3,1,2,4,1,2,5])
  46. print(str(x))
  47.  
  48.  
  49.  
Success #stdin #stdout 0.02s 27712KB
stdin
Standard input is empty
stdout
[[1], [2], [3], [1], [2], [3], [1], [2], [3], [1], [2], [4], [1], [2], [5]]
[[1, 2], [1, 3], [2, 3], [1, 2], [1, 3], [2, 4], [1, 2], [5]]
[[1, 1, 2, 3], [1, 2, 2, 3], [1, 2, 3, 4], [1, 2, 5]]
[[1, 1, 1, 2, 2, 2, 3, 3], [1, 1, 2, 2, 3, 4, 5]]
[[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5]]
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5]