teromakotero icon

Tim sort

teromakotero | PRO | 05/14/19 03:01:59 PM UTC | 0 ⭐ | 358 👁️ | Never ⏰ | []
Python |

1.95 KB

|

None

|

0 👍

/

0 👎

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