Article image
Larissa Santana
Larissa Santana11/01/2024 13:50
Compartilhe

Funções Python: Organizando Elementos Com a Função sort()

    Desde criança aprendemos que organizar nossas coisas é uma ação necessária. Organizávamos nossos brinquedos, livros, materiais escolares e hoje organizamos nosso tempo, nosso código, nossos arquivos na área de trabalho e até organizamos a forma como uma informação será exibida para o usuário. Nesse último caso não precisamos fazer muito esforço, felizmente existem funções em Python que facilitam esse processo. A função que aprenderemos hoje se chama: sort.

    Aplicando a Função sort() No Código

    A função sort é bem simples de usar. De acordo com a documentação de Python, sua sintaxe é a seguinte:

    list.sort(*, key=None, reverse=False) 
    

    Vamos entender cada um dos elementos acima.

    1. list: isso aqui se refere ao elemento que você criou e que vai ser organizado pela função sort;
    2. sort: essa é a função que usaremos para organizar o elemento que criaremos daqui a pouco;
    3. *: basicamente esse asterisco está dizendo que nós devemos passar o nome do parâmetro (key e/ou reverse) junto com o valor que desejamos passar para ele. Não se preocupe se ficou confuso, mostrarei alguns exemplos depois.
    4. key: com esse parâmetro a gente pode definir como queremos que seja a organização dos elementos que criamos (não é obrigatório utilizar esse parâmetro);
    5. reverse: com esse parâmetro nós podemos escolher se queremos que a ordem seja normal ou ao contrário (não é obrigatório utilizar esse parâmetro).

    Vamos programar um pouco e com o passar dos códigos você vai entender melhor como funciona o sort.

    Primeiro precisamos criar um elemento. Eu vou criar uma lista da seguinte forma:

    lista_exemplo = [20, 1, 9, 4, 85, 99, 87, 90]
    

    Agora vamos utilizar o sort para organizar essa lista por ordem crescente. Nosso código ficará dessa forma:

    lista_exemplo.sort()
    print(lista_exemplo)
    

    O resultado que obteremos será esse:

    [1, 4, 9, 20, 85, 87, 90, 99]
    

    Se você quiser que o resultado seja decrescente, você pode usar o parâmetro "reverse" para fazer isso. Para que funcione corretamente, você precisa inserir a palavra "reverse=" e a palavra "True" dentro da função. Talvez você esteja se perguntando: mas eu não posso escrever apenas "True"? Não. Aquele asterisco que foi mencionado no 3° item nos obriga a escrever o nome do parâmetro e o valor que queremos passar. Portanto, para que nosso código dê certo, precisamos fazer dessa forma:

    lista_exemplo.sort(reverse=True)
    print(lista_exemplo)
    

    Nosso resultado será:

    [99, 90, 87, 85, 20, 9, 4, 1]
    

    Bem tranquilo, não? Agora que conseguimos organizar nossa lista em ordem crescente e decrescente, vamos criar uma nova lista, mas dessa vez com nomes. Minha lista ficará assim:

    nomes = ['Camila', 'Maria', 'Lucia', 'Ana', 'Thiago', 'Daniele']
    
    nomes.sort()
    

    Se optarmos por utilizar apenas a função sem parâmetros, nosso resultado será esse:

    ['Ana', 'Camila', 'Daniele', 'Lucia', 'Maria', 'Thiago']
    

    A ordem aplicada pelo sort nesse caso, foi a ordem alfabética, mas imagine que eu queira organizar os nomes pela quantidade de letras, como faríamos isso? Simples, usaremos o parâmetro "key=" e o valor que passaremos será o "len". Nosso código ficará assim:

    ['Ana', 'Maria', 'Lucia', 'Camila', 'Thiago', 'Daniele']
    

    Se quisermos que esse resultado apareça ao contrário, podemos aplicar o "reverse=" na nossa função. O código ficará assim:

    nomes.sort(key=len, reverse=True)
    print(nomes)
    

    O resultado será esse:

    ['Daniele', 'Camila', 'Thiago', 'Maria', 'Lucia', 'Ana']
    

    Se você quiser utilizar outros critérios de organização, você pode desenvolver uma função e passar o nome dela para o parâmetro "Key". Vou mostrar um exemplo:

    def terceiro_caractere(elemento):
      return elemento[2]
    
    nomes.sort(key=terceiro_caractere)
    print(nomes)
    

    Nosso resultado será esse:

    ['Ana', 'Lucia', 'Thiago', 'Camila', 'Daniele', 'Maria']
    

    No exemplo acima, o critério de organização foi baseado na terceira letra de cada nome. Observe um exemplo da lógica aplicada:

    image

    Agora que já sabemos como trabalhar com o sort, vamos entender como essa simples função funciona.

    Entendendo a Lógica Por Trás Do sort()

    Por trás dessa função simples, existe uma imensa lógica por trás. Vamos começar destacando o fato de que essa função usa um algoritmo chamado Timsort e o Timsort é um algoritmo híbrido que se baseia em dois outros algoritmos de ordenação chamados Merge Sort e Insertion Sort. Vamos entender como cada um deles trabalha.

    Merge Sort

    Começando pelo Merge Sort, esse algoritmo se baseia na ideia do dividir para conquistar. Observe:

    image

    Como podemos ver na imagem acima, o Merge Sort divide os valores em blocos até não poder dividir mais, quando isso acontece, ele junta os valores em duplas; compara qual valor é o menor e junta os valores na ordem correta. Ele vai continuar comparando e juntando até que o resultado final seja a ordem correta dos elementos.

    Insertion Sort

    O Insertion Sort funciona de uma forma diferente do Merge Sort. Observe:

    image

    O Insertion Sort compara o valor atual com o próximo ou o anterior (se tiver). Na imagem acima sua lógica é a seguinte:

    • Compara o 7 com 4. 4 é menor que 7, então muda de lugar;
    • 7 se compara com o 5, 5 é menor, então muda de lugar;
    • 5 se compara com o 4, 4 é menor, permanecem no mesmo lugar.
    • Novamente o 7 se compara com o próximo (9), 7 é menor, permanece no lugar.

    Esse processo vai durar até que todos os valores estejam na posição correta. Se você reparar, o número 1 vai ser o valor que mais vai se movimentar. Quando o 9 se comparar com ele, eles irão mudar de lugar, depois o 1 vai se comparar com o 8 e mudar de lugar novamente. Esse processo vai se repetir várias vezes e só vai parar quando o número 1 estiver no lugar correto.

    Timsort

    Agora que já entendemos como esses algoritmos de ordenação funcionam, fica um pouco mais fácil de entender como o Timsort trabalha. Observe:

    image

    O que está acontecendo na imagem acima é o seguinte, a nossa lista será dividida em blocos (runs) e através do Insertion Sort os elementos serão organizados na ordem correta, depois eles vão ser unidos e organizados através do Merge Sort. No final, teremos nossa lista organizada na ordem correta.

    Esse foi o artigo de hoje, espero que vocês tenham gostado.

    Referências

    https://www.programiz.com/dsa/merge-sort

    https://pt.khanacademy.org/computing/computer-science/algorithms/merge-sort/a/overview-of-merge-sort

    https://www.geeksforgeeks.org/insertion-sort/

    https://www.programiz.com/python-programming/methods/list/sort

    https://www.w3schools.com/python/ref_list_sort.asp

    https://www.algowalker.com/tim-sort.html

    https://www.educative./io/answers/what-is-timsort

    https://docs.python.org/pt-br/dev/library/stdtypes.html#list.sort

    Compartilhe
    Comentários (1)
    Gustavo Silva
    Gustavo Silva - 11/01/2024 14:44

    Foi muito esclarecedor, obrigado!