def merge_sort(a): if len(a) < 2: return a l = a[0:len(a)//2] r = a[len(a)//2:] return merge(merge_sort(l), merge_sort(r)) def merge(a, b): out = [] i = 0 j = 0 while i < len(a) or j < len(b): if i >= len(a): out.append(b[j]) j += 1 elif j >= len(b): out.append(a[i]) i += 1 else: if a[i] <= b[j]: out.append(a[i]) i += 1 else: out.append(b[j]) j += 1 return out