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))
Comments