Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.81 KB | None | 0 0
  1. def merge_sort(A, a = 0, b = None): # Sort sub-array A[a:b]
  2.     if b is None: # O(1) initialize
  3.         b = len(A) # O(1)
  4.     if 1 < b - a: # O(1) size k = b - a
  5.         c = (a + b + 1) // 2 # O(1) compute center
  6.         merge_sort(A, a, c) # T(k/2) recursively sort left
  7.         merge_sort(A, c, b) # T(k/2) recursively sort right
  8.         L, R = A[a:c], A[c:b] # O(k) copy
  9.         i, j = 0, 0 # O(1) initialize pointers
  10.         while a < b: # O(n)
  11.             if (j >= len(R)) or (i < len(L) and L[i] < R[j]): # O(1) check side
  12.                 A[a] = L[i] # O(1) merge from left
  13.                 i = i + 1 # O(1) decrement left pointer
  14.             else:
  15.                 A[a] = R[j] # O(1) merge from right
  16.                 j = j + 1 # O(1) decrement right pointer
  17.             a = a + 1 # O(1) decrement merge pointer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement