def partition(li, f, a=[], b=[]):
  if len(li) == 0: return a, b
  x, *xs = li 
  if f(x):
    return partition(xs, f, [*a, x], b)
  return partition(xs, f, a, [*b, x])
    
def qsort(li):
  if len(li) == 0: return []
  p, *xs = li 
  lt, gt = partition(xs, lambda x: x <= p)
  # lt = [x for x in xs if x <= p]
  # gt = [x for x in xs if x > p]
  return [*qsort(lt), p, *qsort(gt)]
  
li = [3,1,2,5,4,0]  
print(li)
print(qsort(li))  
print(partition(li, lambda x: x % 2 == 1))
  

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: