box-o-sand/sorting.py

50 lines
925 B
Python
Raw Normal View History

2011-08-16 01:59:50 +00:00
# vim:fileencoding=utf-8
2011-08-16 02:34:46 +00:00
import math
2011-08-16 01:59:50 +00:00
2011-08-15 10:47:22 +00:00
def insertion_sort(a):
2011-08-16 01:59:50 +00:00
""" Θ(n^2) """
2011-08-15 10:47:22 +00:00
for j in range(1, len(a)):
key = a[j]
i = j - 1
2011-08-15 10:47:22 +00:00
while i >= 0 and a[i] > key:
a[i + 1] = a[i]
i = i - 1
2011-08-15 10:47:22 +00:00
a[i + 1] = key
2011-08-16 02:34:46 +00:00
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