# vim:fileencoding=utf-8 import math def insertion_sort(a): """ Θ(n^2) """ for j in range(1, len(a)): key = a[j] i = j - 1 while i >= 0 and a[i] > key: a[i + 1] = a[i] i = i - 1 a[i + 1] = key def merge_sort(m): n = len(m) if n <= 1: return m middle = math.ceil(n / 2) left = m[:middle] right = m[middle:] left = merge_sort(left) right = merge_sort(right) return merge(left, right) def merge(left, right): result = [] while len(left) > 0 or len(right) > 0: if len(left) > 0 and len(right) > 0: if left[0] <= right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)) elif len(left) > 0: result.append(left.pop(0)) elif len(right) > 0: result.append(right.pop(0)) return result