In [3]:
def merge(l1,l2):
l=[]
for i in range(len(l1)+len(l2)):
if len(l1)==0:
l.append( l2.pop(0))
elif len(l2)==0:
l.append( l1.pop(0))
elif l1[0]<l2[0]:
l.append( l1.pop(0))
else:
l.append( l2.pop(0))
return l
def merge_sort(l):
if len(l)==0 or len(l)==1:
return l
m=len(l)//2
sorted1=merge_sort(l[slice(m)])
sorted2=merge_sort(l[slice(m,None)])
return merge(sorted1,sorted2)
print(merge([3],[1]))
print( merge_sort([3,5,2,1,7]))
In [52]:
import random
def quick_sort(l):
# base case
if len(l)==0 or len(l)==1:
return l
elif len(l)==2:
if l[0]<l[1]:
return l
else:
return [l[1],l[0]]
# pick a random pivot element
p = l[random.randrange(len(l))]
print(p)
# make a list of elements smaller than pivot and sort it
sorted1=quick_sort([e for e in l if e<p])
# make a list of elements bigger than pivot and sort it
sorted2=quick_sort([e for e in l if e>p])
return sorted1+[p]+sorted2
print( quick_sort([3,5,2,1,7]))
In [ ]: