from typing import List
def quicksort(l: List):
"""
Recebe uma lista de elementos e devolve eles ordenados
"""
# Caso base! Nunca se esqueça disso em funções recursivas@
if not len(l):
return l
# Escolhemos um pivot, removemos ele da lista!
# Reduzir a entrada também é essêncial!
pivot = l.pop(0)
# Separamos os elementos menores
lower = [e for e in l if e <= pivot]
# Separamos os maiores
uppper = [e for e in l if e > pivot]
# Os menores ficam na esquerda do pivo
# Os maiores ficam na direita
# Ai acontece a magia da recursão...
# Ordedamos os menores e os maiores com a mesma função.
return quicksort(lower) + [pivot] + quicksort(uppper)
def main():
elems = [3,2,3,6,7,4,2,-1]
print(quicksort(elems))
if __name__ == '__main__':
main()