Sorting algorithms, cont'd
Merge sort
def merge_sort(data):
if len(data) > 1:
mid = len(data) // 2 # divide list into two halves
a = data[:mid]
b = data[mid:]
merge_sort(a) # sort each half
merge_sort(b)
ai = 0 # merge the sorted halves
bi = 0
while ai < len(a) and bi < len(b): # while values remain in each half,
if a[ai] < b[bi]: # add it into the list's end.
data[ai + bi] = a[ai]
ai += 1
else:
data[ai + bi] = b[bi]
bi += 1
while ai < len(a): # deplete any remaining values from a
data[ai + bi] = a[ai]
ai += 1
while bi < len(b): # deplete any remaining values from a
data[ai + bi] = b[bi]
bi += 1