Solution: Merge and Bubble sort



examples/functions/bubble_sort.py
def bubble_sort(*values):
    values = list(values)
    for ix in range(len(values)-1):
        for jx in range(len(values)-1-ix):
            if values[jx] > values[jx+1]:
                values[jx], values[jx+1] = values[jx+1], values[jx]
    return values

print(bubble_sort(1, 2, 3))
print(bubble_sort(3, 2, 1))
print(bubble_sort(10, 9, 8, 7, 6, 5, 4, 3, 2, 1))

examples/functions/iterative_bubble_sort.py
def iterative_bubble_sort(data):
    data = data[:]
    for end in (range(len(data)-1, 0, -1)):
        for i in range(end):
            if data[i] < data[i+1]:
                data[i], data[i+1] = data[i+1], data[i]
    return data

old = [1, 5, 2, 4, 8]
new = iterative_bubble_sort(old)
print(old)
print(new)

examples/functions/recursive_bubble_sort.py
def recursive_bubble_sort(data):
    data = data[:]
    if len(data) == 1:
        return data

    last = data.pop()
    sorted_data = recursive_bubble_sort(data)
    for i in range(len(sorted_data)):
        if last > sorted_data[i]:
            sorted_data.insert(i, last)
            break
    else:
        sorted_data.append(last)
    return sorted_data


old = [1, 5, 2, 4, 8]
new = recursive_bubble_sort(old)
print(old)
print(new)