Merge Sort
code: python
# O(nlogn), O(n)
def merge_sort(arr):
if len(arr) == 1:
return arr
mid = len(arr) // 2
left = arr:mid
right = arrmid:
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if lefti <= rightj:
result.append(lefti)
i += 1
else:
result.append(rightj)
j += 1
result.extend(lefti:)
result.extend(rightj:)
return result
def test_heap_sort():
assert merge_sort(6, 4, 3, 7, 5, 1, 2) == 1, 2, 3, 4, 5, 6, 7