import time
def timeSort(sortfn, L):
t1 = time.time()
sortfn(L)
t2 = time.time()
return (t2 - t1)
# try, e.g.,
# l = mixup(list(range(4000)))
# timeAllSorts(l)
import random
def quicksort(L):
if len(L)<2: return L
pivot_element = random.choice(L)
small = [i for i in L if i< pivot_element]
medium = [i for i in L if i==pivot_element]
large = [i for i in L if i> pivot_element]
return quicksort(small) + medium + quicksort(large)
def timeAllSorts(L):
Lcopy = L[:]
qTime = timeSort(quicksort, Lcopy)
sTime = timeSort(sorted, Lcopy)
print("{}\t sel:{:.2f} quick:{:.2f}".format(len(L),sTime, qTime))
l = list(range(8000,1,-1))
timeAllSorts(l)
aW1wb3J0IHRpbWUKCmRlZiB0aW1lU29ydChzb3J0Zm4sIEwpOgogICB0MSA9IHRpbWUudGltZSgpCiAgIHNvcnRmbihMKQogICB0MiA9IHRpbWUudGltZSgpCiAgIHJldHVybiAodDIgLSB0MSkKCiMgdHJ5LCBlLmcuLAojIGwgPSBtaXh1cChsaXN0KHJhbmdlKDQwMDApKSkKIyB0aW1lQWxsU29ydHMobCkKCmltcG9ydCByYW5kb20KZGVmIHF1aWNrc29ydChMKToKICAgIGlmIGxlbihMKTwyOiByZXR1cm4gTAogICAgcGl2b3RfZWxlbWVudCA9IHJhbmRvbS5jaG9pY2UoTCkKICAgIHNtYWxsID0gW2kgZm9yIGkgaW4gTCBpZiBpPCBwaXZvdF9lbGVtZW50XQogICAgbWVkaXVtID0gW2kgZm9yIGkgaW4gTCBpZiBpPT1waXZvdF9lbGVtZW50XQogICAgbGFyZ2UgPSBbaSBmb3IgaSBpbiBMIGlmIGk+IHBpdm90X2VsZW1lbnRdCiAgICByZXR1cm4gcXVpY2tzb3J0KHNtYWxsKSArIG1lZGl1bSArIHF1aWNrc29ydChsYXJnZSkKCmRlZiB0aW1lQWxsU29ydHMoTCk6CgogICAgTGNvcHkgPSBMWzpdCiAgICBxVGltZSA9IHRpbWVTb3J0KHF1aWNrc29ydCwgTGNvcHkpCiAgICBzVGltZSA9IHRpbWVTb3J0KHNvcnRlZCwgTGNvcHkpCgogICAgcHJpbnQoInt9XHQgc2VsOns6LjJmfSBxdWljazp7Oi4yZn0iLmZvcm1hdChsZW4oTCksc1RpbWUsIHFUaW1lKSkKCmwgPSBsaXN0KHJhbmdlKDgwMDAsMSwtMSkpCnRpbWVBbGxTb3J0cyhsKQ==