Complexity Analysis
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(a, b):
result = []
i = j = 0
while i < len(a) and j < len(b):
if a[i] <= b[j]:
result.append(a[i]); i += 1
else:
result.append(b[j]); j += 1
result.extend(a[i:])
result.extend(b[j:])
return result
What is the time and space complexity?
Work it out before scrolling down.
Time
O(n log n)
Space
O(n)
How to derive it
The array is halved log n times (tree depth = log n). At each level of recursion, every element is visited once during merging → O(n) work per level. Total: O(n) × O(log n) = O(n log n). Space: the merge creates temporary arrays totaling O(n) at each level, plus O(log n) stack depth.