def merge(a, b): """Merges two sorted lists""" i, j = 0, 0 r = [] while i < len(a) and j < len(b): if a[i] < b[j]: r.append(a[i]) i += 1 else: r.append(b[j]) j += 1 while i < len(a): r.append(a[i]) i += 1 while j < len(b): r.append(b[j]) j += 1 return r def merge_sort(v): length = len(v) if length <= 1: return v half_length = length // 2 a = merge_sort(v[:half_length]) b = merge_sort(v[half_length:]) return merge(a, b) if __name__ == "__main__": print(merge_sort([42, 12, 3, 1, 5]))