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()