2018-06-14 15:50:29 -07:00

47 lines
959 B
Python

#!/usr/bin/env python
# AKA: do you believe in magic?
__author__ = "bt3"
def merge_sort(array):
if len(array) < 2:
return array
# divide
mid = len(array)//2
left = merge_sort(array[:mid])
right = merge_sort(array[mid:])
# merge
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j+= 1
# make sure nothing is left behind
if left[i:]:
result.extend(left[i:])
if right[j:]:
result.extend(right[j:])
return result
if __name__ == '__main__':
array = [3, 1, 6, 0, 7, 19, 7, 2, 22]
sorted = [0, 1, 2, 3, 6, 7, 7, 19, 22]
assert(merge_sort(array) == sorted)
array = []
assert(merge_sort(array) == array)
array = [1]
assert(merge_sort(array) == array)