Lecture Notes on 30 July 2014 # merges two sorted lists def merge (a, b): c = [] idxA = 0 idxB = 0 while ((idxA < len(a)) and (idxB < len(b))): if (a[idxA] < b[idxB]): c.append (a[idxA]) idxA += 1 else: c.append (b[idxB]) idxB += 1 while (idxA < len(a)): c.append (a[idxA]) idxA += 1 while (idxB < len(b)): c.append (b[idxB]) idxB += 1 return c # binary search in a sorted list def binary_search (a, x): lo = 0 hi = len(a) - 1 while (lo <= hi): mid = (lo + hi ) // 2 if (x < a[mid]): hi = mid - 1 elif (x > a[mid]): lo = mid + 1 else: return mid return -1 # sequential search in an unsorted list def seq_search (a, x): for i in range (len(a)): if (x == a[i]): return i return -1 def seq_search2 (a, x): index = [] for i in range (len(a)): if (x == a[i]): index.append (i) return index # selection sort in place def selection_sort (a): for i in range (len(a) - 1): min = a[i] min_idx = i # find the minimum for j in range (i + 1, len(a)): if (a[j] < min): min = a[j] min_idx = j # swap the elements a[i], a[min_idx] = a[min_idx], a[i] def main (): a = [9, 1, 8, 2, 3, 7, 5, 6, 4] print (a) selection_sort (a) print (a) main()