# mergesort.py # 9/9/08 Lecture 2 -- 6.006 Introduction to algorithms def merge_sort(A): """ Sort list A into order, and return result. """ n = len(A) if n==1: return A mid = n//2 # floor division L = merge_sort(A[:mid]) R = merge_sort(A[mid:]) return merge(L,R) def merge(L,R): """ Given two sorted sequences L and R, return their merge. """ i = 0 j = 0 answer = [] while i-1 and A[i]>key: A[i+1] = A[i] i = i-1 A[i+1] = key return A def test_insertion(n): """ Run insertion sort once on random list of length n Print out running time divided by n**2 """ L = random_list(n) t0 = time.clock() insertion_sort(L) t1 = time.clock() elapsed = t1-t0 print "%g seconds elapsed for n = %d (= %g * n**2)"%(elapsed,n,elapsed/(n**2)) def test_sorted(n): """ Run built-in 'sorted' sort once on random input of length n Print out running time divided by n*lg(n) """ L = random_list(n) t0 = time.clock() sorted(L) t1 = time.clock() elapsed = t1-t0 print "%g seconds elapsed for n = %d (= %g * n lg(n))"%(elapsed,n,elapsed/(n*lg(n)))