Lecture Notes on 16 November 2009 def mergeSort (a, lo, hi): if (lo < hi): mid = (lo + hi) / 2 mergeSort (a, lo, mid) mergeSort (a, mid + 1, hi) merge (a, lo, hi) def merge (a, lo, hi): tmp = [] mid = (lo + hi) / 2 left1 = lo right1 = mid left2 = mid + 1 right2 = hi while ((left1 <= right1) and (left2 <= right2)): if (a[left1] < a[left2]): tmp.append(a[left1]) left1 = left1 + 1 else: tmp.append(a[left2]) left2 = left2 + 1 while (left1 <= right1): tmp.append(a[left1]) left1 = left1 + 1 while (left2 <= right2): tmp.append(a[left2]) left2 = left2 + 1 aIdx = lo for i in range (len(tmp)): a[aIdx] = tmp[i] aIdx = aIdx + 1 def main(): a = [9, 1, 8, 2, 7, 3, 6, 4, 5] print a mergeSort (a, 0, len(a) - 1) print a main() # Perform permutation def permute (a, lo, hi): if (lo == hi): print a else: for i in range (lo, hi + 1): a[lo], a[i] = a[i], a[lo] permute (a, lo + 1, hi) a[lo], a[i] = a[i], a[lo] def main(): a = [1, 2, 3] permute (a, 0, len(a) - 1) main()