Bubble Algoritmo de classificação com Python usando exemplo de lista

O que é uma Bubble Classificar?

Bubble Classificar é um algoritmo de classificação usado para classificar itens de lista em ordem crescente, comparando dois valores adjacentes. Se o primeiro valor for superior ao segundo valor, o primeiro valor ocupa a posição do segundo valor, enquanto o segundo valor assume a posição do primeiro valor. Se o primeiro valor for inferior ao segundo valor, nenhuma troca será feita.

Este processo é repetido até que todos os valores de uma lista tenham sido comparados e trocados, se necessário. Cada iteração é geralmente chamada de passagem. O número de passagens em uma classificação por bolha é igual ao número de elementos em uma lista menos um.

Neste curso Bubble Classificando em Python tutorial você vai aprender:

Implementando o Bubble Algoritmo de classificação

Dividiremos a implementação em três (3) etapas, a saber, o problema, a solução e o algoritmo que podemos usar para escrever código para qualquer linguagem.

O problema

Uma lista de itens é fornecida em ordem aleatória e gostaríamos de organizá-los de maneira ordenada

Considere a seguinte lista:

[21,6,9,33,3]

A solução

Itere pela lista comparando dois elementos adjacentes e trocando-os se o primeiro valor for maior que o segundo valor.

O resultado deve ser o seguinte:

[3,6,9,21,33]

Algoritmo

O algoritmo de classificação por bolha funciona da seguinte maneira

Passo 1) Obtenha o número total de elementos. Obtenha o número total de itens na lista fornecida

Passo 2) Determine o número de passagens externas (n – 1) a serem feitas. Seu comprimento é lista menos um

Passo 3) Execute passagens internas (n – 1) vezes para a passagem externa 1. Obtenha o valor do primeiro elemento e compare-o com o segundo valor. Se o segundo valor for menor que o primeiro valor, troque as posições

Passo 4) Repita as passagens da etapa 3 até chegar à passagem externa (n – 1). Obtenha o próximo elemento da lista e repita o processo executado na etapa 3 até que todos os valores tenham sido colocados na ordem crescente correta.

Passo 5) Retorne o resultado quando todas as passagens forem concluídas. Retornar os resultados da lista ordenada

Passo 6) Algoritmo de otimização

Evite passagens internas desnecessárias se a lista ou os valores adjacentes já estiverem classificados. Por exemplo, se a lista fornecida já contém elementos que foram classificados em ordem crescente, podemos interromper o loop antecipadamente.

Otimizado Bubble Algoritmo de classificação

Por padrão, o algoritmo para classificação por bolhas em Python compara todos os itens na lista, independentemente de a lista já estar ordenada ou não. Se a lista fornecida já estiver ordenada, comparar todos os valores é um desperdício de tempo e recursos.

Otimizar a classificação por bolha nos ajuda a evitar iterações desnecessárias e economizar tempo e recursos.

Por exemplo, se o primeiro e o segundo itens já estiverem classificados, não será necessário iterar pelo restante dos valores. A iteração é encerrada e a próxima é iniciada até que o processo seja concluído conforme mostrado abaixo Bubble Exemplo de classificação.

A otimização é feita usando as seguintes etapas

Passo 1) Crie uma variável de flag que monitore se ocorreu alguma troca no loop interno

Passo 2) Se os valores trocaram de posição, continue para a próxima iteração

Passo 3) Se os benefícios não trocaram de posição, encerre o loop interno e continue com o loop externo.

Uma classificação por bolha otimizada é mais eficiente, pois executa apenas as etapas necessárias e ignora aquelas que não são obrigatórias.

Representação visual

Dada uma lista de cinco elementos, as imagens a seguir ilustram como a classificação por bolha itera pelos valores ao classificá-los

A imagem a seguir mostra a lista não classificada

Representação visual

Primeira iteração

Passo 1)

Representação visual

Os valores 21 e 6 são comparados para verificar qual é maior que o outro.

Representação visual

21 é maior que 6, então 21 ocupa a posição ocupada por 6 enquanto 6 ocupa a posição ocupada por 21

Representação visual

Nossa lista modificada agora se parece com a acima.

Passo 2)

Representação visual

Os valores 21 e 9 são comparados.

Representação visual

21 é maior que 9, então trocamos as posições de 21 e 9

Representação visual

A nova lista agora é como acima

Passo 3)

Representação visual

Os valores 21 e 33 são comparados para encontrar o maior.

Representação visual

O valor 33 é maior que 21, portanto nenhuma troca ocorre.

Passo 4)

Representação visual

Os valores 33 e 3 são comparados para encontrar o maior.

Representação visual

O valor 33 é maior que 3, então trocamos suas posições.

Representação visual

A lista ordenada no final da primeira iteração é como a acima

Segunda iteração

A nova lista após a segunda iteração é a seguinte

Representação visual

Terceira Iteração

A nova lista após a terceira iteração é a seguinte

Representação visual

Quarta Iteração

A nova lista após a quarta iteração é a seguinte

Representação visual

Python Exemplos

O código a seguir mostra como implementar o Bubble Algoritmo de classificação em Python.

def bubbleSort( theSeq ):
    n = len( theSeq )

    for i in range( n - 1 ) :
        flag = 0

        for j in range(n - 1) :
            
            if theSeq[j] > theSeq[j + 1] : 
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21,6,9,33,3] 

result = bubbleSort(el)

print (result)

Executando o programa de classificação de bolhas acima em Python produz os seguintes resultados

[6, 9, 21, 3, 33]

Explicação do código

A explicação para o Python Bubble Classificar o código do programa é o seguinte

Explicação do código

AQUI,

  1. Define uma função bubbleSort que aceita um parâmetro theSeq. O código não produz nada.
  2. Obtém o comprimento do array e atribui o valor a uma variável n. O código não produz nada
  3. Inicia um loop for que executa o algoritmo de classificação por bolha (n – 1) vezes. Este é o loop externo. O código não produz nada
  4. Define uma variável de flag que será usada para determinar se ocorreu uma troca ou não. Isso é para fins de otimização. O código não produz nada
  5. Inicia o loop interno que compara todos os valores da lista, do primeiro ao último. O código não produz nada.
  6. Usa a instrução if para verificar se o valor do lado esquerdo é maior que aquele do lado direito imediato. O código não produz nada.
  7. Atribui o valor de theSeq[j] a uma variável temporal tmp se a condição for avaliada como verdadeira. O código não produz nada
  8. O valor de theSeq[j + 1] é atribuído à posição de theSeq[j]. O código não produz nada
  9. O valor da variável tmp é atribuído à posição theSeq[j + 1]. O código não produz nada
  10. A variável flag recebe o valor 1 para indicar que uma troca ocorreu. O código não produz nada
  11. Usa uma instrução if para verificar se o valor do sinalizador da variável é 0. O código não gera nada
  12. Se o valor for 0, chamamos a instrução break que sai do loop interno.
  13. Retorna o valor de theSeq depois de classificado. O código gera a lista classificada.
  14. Define uma variável el que contém uma lista de números aleatórios. O código não produz nada.
  15. Atribui o valor da função bubbleSort a uma variável result.
  16. Imprime o valor da variável resultado.

Bubble classificar vantagens

A seguir estão algumas das vantagens do algoritmo de classificação por bolha

  • É fácil de entender
  • Funciona muito bem quando a lista já está ou quase classificada
  • Não requer memória extensa.
  • É fácil escrever o código do algoritmo
  • Os requisitos de espaço são mínimos em comparação com outros algoritmos de classificação.

Bubble classificar Desvantagens

A seguir estão algumas das desvantagens do algoritmo de classificação por bolha

  • Não funciona bem ao classificar listas grandes. Leva muito tempo e recursos.
  • É usado principalmente para fins acadêmicos e não para aplicações no mundo real.
  • O número de passos necessários para ordenar a lista é da ordem n2

Análise de complexidade de Bubble Classificar

Existem três tipos de complexidade:

1) Classificar complexidade

A complexidade de classificação é usada para expressar a quantidade de tempo de execução e espaço necessário para classificar a lista. A classificação por bolha faz (n – 1) iterações para classificar a lista, onde n é o número total de elementos na lista.

2) Complexidade de tempo

A complexidade de tempo da classificação por bolha é O(n2)

As complexidades de tempo podem ser categorizadas como:

  • Pior caso – é aqui que a lista fornecida está em ordem decrescente. O algoritmo executa o número máximo de execuções que é expresso como [Big-O] O(n2)
  • Melhor caso – isso ocorre quando a lista fornecida já está ordenada. O algoritmo executa o número mínimo de execuções que é expresso como [Big-Omega] Ω(n)
  • Caso médio – isso ocorre quando a lista está em ordem aleatória. A complexidade média é representada como [Big-theta] ⊝(n2)

3) Complexidade espacial

A complexidade do espaço mede a quantidade de espaço extra necessária para classificar a lista. A classificação por bolha requer apenas um (1) espaço extra para a variável temporal usada para troca de valores. Portanto, possui uma complexidade espacial de O (1).

Resumo

  • O algoritmo de classificação por bolha funciona comparando dois valores adjacentes e trocando-os se o valor à esquerda for menor que o valor à direita.
  • A implementação de um algoritmo de classificação por bolhas é relativamente simples com Python. Tudo que você precisa usar são loops for e instruções if.
  • O problema que o algoritmo de classificação por bolha resolve é pegar uma lista aleatória de itens e transformá-la em uma lista ordenada.
  • O algoritmo de classificação por bolha na estrutura de dados tem melhor desempenho quando a lista já está classificada, pois executa um número mínimo de iterações.
  • O algoritmo de classificação por bolha não funciona bem quando a lista está na ordem inversa.
  • A classificação por bolha tem uma complexidade de tempo de O (n2) e uma complexidade espacial de O (1)
  • O algoritmo de classificação por bolha é mais adequado para fins acadêmicos e não para aplicações do mundo real.
  • A classificação por bolha otimizada torna o algoritmo mais eficiente, ignorando iterações desnecessárias ao verificar valores que já foram classificados.