def merge_sort(sequence): """Returns the sequence, sorted in ascending order. """ l, r = 0, len(sequence) - 1 if l < r: mid = ((r + l) // 2) + 1 left = sequence[l:mid] right = sequence[mid:r+1] sequence = merge(sequence, merge_sort(left), merge_sort(right)) return sequence def merge(sequence, left, right): """Merges two sorted sequences into sequence. """ llen, rlen = len(left), len(right) a, b = 0, 0 for i in range(llen + rlen): if a < llen: if b < rlen: if left[a] <= right[b]: sequence[i] = left[a]; a += 1 else: sequence[i] = right[b]; b += 1 else: sequence[i] = left[a]; a += 1 else: sequence[i] = right[b]; b += 1 return sequence