merge sort is a Divide and Conquer algorithm for sorting.
intuition
- take a list, and split in half
- recursively, call merge sort in each half
- merge them together using two pointer method (i.e. advance pointer when one is smaller than the other)
requirements
def merge(a,b):
ptr1 = 0
ptr2 = 1
new = []
# use two pointers, ...
def mergesort(a):
n = len(a)
if n <= 1:
return a
l = mergesort(a[0: n/2])
r = mergesort(a[n/2: n])
return merge(l,r)
additional information
correctness
Induction.
Hypothesis: every recursive call on an array of at most length i, mergesort works.
Base case: 1 element array is sorted.
Step: If IH holds for all \(0 < i < k\), then it holds for \(i=k\).
performance
\(\log n\) levels, merge each takes \(n\).