from timeit import timeit from random import randint ################################################################## # COPY AND PASTE YOUR bubble_sort AND merge_sort functions below # ################################################################## def bubble_sort(unsorted): sorted = unsorted[:] swapped = True while(swapped): swapped = False for i in range(len(sorted) - 1): if sorted[i] > sorted[i+1]: sorted[i], sorted[i+1] = sorted[i+1], sorted[i] swapped = True return sorted def merge(list_a, list_b): list_c = [] while len(list_a) > 0 and len(list_b) > 0: if list_a[0] < list_b[0]: list_c.append(list_a.pop(0)) else: list_c.append(list_b.pop(0)) if list_a == []: list_c += list_b else: list_c += list_a #print("merged list is", list_c) return list_c def merge_sort(unsorted): if len(unsorted) < 2: return unsorted else: middle = len(unsorted) // 2 front = unsorted[:middle] back = unsorted[middle:] #print("splits are", front, back) front = merge_sort(front) back = merge_sort(back) return merge(front, back) def timsort(unsorted): return sorted(unsorted) #Generate a large (1000 items) random list #list_to_sort = [randint(0,100000) for i in range(1000)] list_to_sort = [] for i in range(1000): list_to_sort.append(i) list_to_sort.reverse() #Create anonymous functions to use with timeit, be sure to check these function names match your pasted ones bs = lambda: bubble_sort(list_to_sort) ms = lambda: merge_sort(list_to_sort) ts = lambda: timsort(list_to_sort) #time the functions for 100 runs each print("Merge took:") print(timeit(ms, number = 100)) print("Bubble took:") print(timeit(bs, number = 100)) print("Timsort took:") print(timeit(ts, number = 100))