fork download
  1. def merge(a, left, middle, right):
  2. """
  3. middle-- последний элемент первой части
  4. """
  5. tmp = [0] * (right + 1 - left)
  6. pos1 = left
  7. pos2 = middle + 1
  8. pos3 = 0
  9. while pos1 <= middle and pos2 <= right:
  10. if a[pos1] <= a[pos2]:
  11. tmp[pos3] = a[pos1]
  12. pos1 += 1
  13. else:
  14. tmp[pos3] = a[pos2]
  15. pos2 += 1
  16. pos3 += 1
  17. while pos1 <= middle:
  18. tmp[pos3] = a[pos1]
  19. pos1 += 1
  20. pos3 += 1
  21. while pos2 <= right:
  22. tmp[pos3] = a[pos2]
  23. pos2 += 1
  24. pos3 += 1
  25. for i in range(pos3):
  26. a[left + i] = tmp[i]
  27.  
  28.  
  29. def merge_sort(a, left=0, right=None):
  30. # 1
  31. # if right == -228:
  32. # right = len(a) - 1
  33. # 2
  34. right = right or (len(a) - 1)
  35.  
  36. if left < right:
  37. middle = (left + right) // 2
  38. merge_sort(a, left, middle)
  39. merge_sort(a, middle + 1, right)
  40. merge(a, left, middle, right)
  41.  
  42.  
  43. A = [4, 2, 5, 1, 3]
  44. A_sorted = [1, 2, 3, 4, 5]
  45. merge_sort(A)
  46. print(A)
Runtime error #stdin #stdout #stderr 0.12s 24340KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 45, in <module>
  File "./prog.py", line 38, in merge_sort
  File "./prog.py", line 38, in merge_sort
  File "./prog.py", line 38, in merge_sort
  [Previous line repeated 995 more times]
  File "./prog.py", line 36, in merge_sort
RecursionError: maximum recursion depth exceeded in comparison