CSci 150: Foundations of computer science I
Home Syllabus Assignments Tests

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