Bubble Sort em C++: um guia para iniciantes
Se você está aprendendo sobre algoritmos de classificação, pode ter se deparado com o tipo de bolha. Bubble sort é um dos algoritmos de classificação mais simples e intuitivos que funciona trocando repetidamente elementos adjacentes se eles estiverem na ordem errada. Neste artigo, você aprenderá o que é o bubble sort, como funciona, qual sua complexidade de tempo, quais são suas vantagens e desvantagens e como implementá-lo em C++.
O que é tipo de bolha?
Bubble sort é um algoritmo de classificação que compara cada par de elementos adjacentes em uma matriz e os troca se estiverem na ordem errada. O algoritmo repete esse processo até que a matriz seja classificada. O nome classificação por bolhas vem do fato de que os elementos menores ou maiores "borbulham" até o final da matriz após cada iteração.
bubble sort c++
DOWNLOAD: https://gohhs.com/2vRj74
Como funciona a classificação por bolhas?
Digamos que queremos classificar uma matriz de números inteiros em ordem crescente usando o tipo de bolha. Aqui estão os passos que precisamos seguir:
Comece pelo primeiro elemento da matriz e compare-o com o segundo elemento. Se o primeiro elemento for maior que o segundo elemento, troque-os.
Vá para o próximo par de elementos e compare-os. Se estiverem na ordem errada, troque-os.
Continue esse processo até chegarmos ao final da matriz. Neste ponto, o maior elemento estará na última posição do array.
Repita as etapas 1 a 3 para os demais elementos não classificados, excluindo o último elemento, que já está classificado.
Pare quando não houver mais swaps ou quando o array estiver totalmente ordenado.
Qual é a complexidade de tempo do tipo de bolha?
A complexidade de tempo de um algoritmo mede a velocidade com que ele é executado com base no tamanho da entrada. Para classificação de bolhas, podemos analisar quantas comparações e trocas ele realiza no pior caso, no caso médio e nos melhores cenários.
O pior cenário para classificação de bolha ocorre quando a matriz é classificada na ordem inversa.Nesse caso, precisamos realizar n-1 comparações e trocas para cada uma das n-1 iterações, onde n é o tamanho da matriz. Portanto, a complexidade de tempo do pior caso do bubble sort é O(n).
O cenário de caso médio para classificação de bolha ocorre quando a matriz é ordenada aleatoriamente. Nesse caso, podemos assumir que metade das comparações resultam em swaps e metade não. Portanto, a complexidade média do tempo de caso do Bubble Sort também é O(n).
O melhor cenário para classificação por bolha ocorre quando a matriz já está classificada. Nesse caso, precisamos apenas realizar n-1 comparações e nenhuma troca para cada iteração. Portanto, a complexidade de tempo do melhor caso de classificação de bolhas é O(n).
Quais são as vantagens e desvantagens do Bubble Sort?
Bubble sort tem algumas vantagens e desvantagens que o tornam adequado ou inadequado para determinadas situações. Aqui estão alguns deles:
As vantagens do Bubble Sort são:
É fácil de entender e implementar.
Não requer espaço extra para armazenar valores temporários.
Ele pode detectar se a matriz já está classificada em uma passagem.
As desvantagens do Bubble Sort são:
É muito lento e ineficiente para grandes matrizes.
Ele executa muitas comparações e trocas desnecessárias, mesmo que o array esteja quase classificado.
Não é estável, o que significa que pode alterar a ordem relativa de elementos iguais.
Como implementar o Bubble Sort em C++ Como implementar o tipo de bolha em C++?
Agora que você sabe o que é o bubble sort e como ele funciona, vamos ver como implementá-lo em C++. Mostraremos duas versões do algoritmo: uma básica e uma otimizada.
Implementação básica
A implementação básica do Bubble Sort em C++ segue as etapas que descrevemos anteriormente. Usamos um loop for aninhado para iterar sobre o array e comparar cada par de elementos adjacentes. Usamos uma variável temporária para trocá-los se estiverem na ordem errada. Também usamos uma variável booleana para acompanhar se alguma troca ocorreu em cada iteração.Se nenhuma troca ocorreu, podemos sair do loop e retornar o array classificado.
Exemplo de código
usando namespace std; // Função para imprimir um array void printArray(int arr[], int size) for (int i = 0; i arr[j + 1]) // Se o elemento atual for maior que o próximo elemento swap(arr[j], arr[j + 1]); // Troque-os usando uma variável temporária swapped = true; // Defina swapped como verdadeiro if (!swapped) // Se nenhuma troca ocorreu nesta iteração break; // Sai do loop // Código do driver int main() int arr[] = 64, 34, 25, 12, 22, 11, 90; // Matriz de amostra int size = sizeof(arr) / sizeof(arr[0]); // Tamanho do array cout
Explicação da saída
A saída do exemplo de código é:
Matriz não classificada: 64 34 25 12 22 11 90 Matriz classificada: 11 12 22 25 34 64 90
O exemplo de código mostra como o algoritmo de classificação de bolhas classifica a matriz de amostra em ordem crescente. Imprime as matrizes não classificadas e classificadas para comparação. Você pode ver como os elementos menores se movem para a esquerda e os elementos maiores se movem para a direita após cada iteração.
Implementação otimizada
A implementação básica do Bubble Sort pode ser otimizada usando alguns truques para reduzir o número de comparações e trocas.Um truque é usar uma variável para armazenar o último índice onde ocorreu uma troca em cada iteração. Isso significa que todos os elementos após esse índice já estão classificados e não precisam ser comparados novamente. Outro truque é verificar se o array já está ordenado antes de chamar a função de classificação por bolhas. Isso pode economizar tempo se a matriz já estiver classificada ou quase classificada.
Exemplo de código
usando namespace std; // Função para imprimir um array void printArray(int arr[], int size) for (int i = 0; i arr[i + 1]) // Se algum elemento for maior que o próximo return false; // Retorna falso retorna verdadeiro; // Retorna verdadeiro se tal elemento não for encontrado // Função para implementar classificação de bolha otimizada void bubbleSort(int arr[], int size) int lastSwapIndex; // Para armazenar o último índice onde ocorreu uma troca for (int i = size -1 ; i >0 ; i--) // Loop externo para n-1 iterações, começando do final lastSwapIndex = -1; // Assuma que não há trocas no início for (int j = 0; j arr[j + 1]) // Se o elemento atual for maior que o próximo elemento swap(arr[j], arr[j + 1]); // Troque-os usando uma variável temporária lastSwapIndex = j; // Atualiza o último índice de troca if (lastSwapIndex == -1) // Se nenhuma troca ocorreu nesta iteração break; // Sai do loop i = lastSwapIndex; // Define o limite do loop externo para o último índice de troca // Código do driver int main() int arr[] = 64, 34, 25, 12, 22, 11, 90; // Matriz de amostra int size = sizeof(arr) / sizeof(arr[0]); // Tamanho do array cout
Explicação da saída
A saída do exemplo de código é:
Matriz não classificada: 64 34 25 12 22 11 90 Matriz classificada: 11 12 22 25 34 64 90
O exemplo de código mostra como o algoritmo de classificação de bolha otimizado classifica a matriz de amostra em ordem crescente. Imprime as matrizes não classificadas e classificadas para comparação. Você pode ver como o algoritmo reduz o número de comparações e trocas usando o último índice de troca e a verificação classificada.
Conclusão
Bubble sort é um algoritmo de classificação simples e fácil de entender que funciona trocando elementos adjacentes repetidamente se eles estiverem na ordem errada. No entanto, também é muito lento e ineficiente para matrizes grandes ou quase classificadas. Tem uma complexidade de tempo de O(n) nos piores e médios casos, e O(n) no melhor caso. Pode ser otimizado usando alguns truques para reduzir o número de comparações e trocas. Neste artigo você aprendeu o que é o bubble sort, como funciona, qual a sua complexidade de tempo, quais são as suas vantagens e desvantagens e como implementá-lo em C++ usando versões básicas e otimizadas.
perguntas frequentes
O que é um algoritmo de ordenação?
Um algoritmo de classificação é um método de organizar uma coleção de elementos em uma ordem específica, como crescente ou decrescente. Os algoritmos de classificação são úteis para organizar dados e facilitar a pesquisa, análise ou exibição.
Quais são alguns outros algoritmos de classificação além do Bubble Sort?
Alguns outros algoritmos de classificação comuns são classificação por seleção, classificação por inserção, classificação por mesclagem, classificação rápida, classificação por heap, classificação radix, etc. Cada algoritmo tem suas próprias vantagens e desvantagens, dependendo do tipo e tamanho dos dados de entrada.
Como posso testar o desempenho do Bubble Sort?
Você pode testar o desempenho da classificação por bolha medindo quanto tempo leva para classificar diferentes matrizes com tamanhos e ordens diferentes. Você pode usar uma função de cronômetro ou uma biblioteca para registrar os horários de início e término do processo de classificação. Você também pode comparar os resultados com outros algoritmos de classificação para ver qual deles é mais rápido ou mais lento.
Como posso modificar a classificação de bolhas para classificar em ordem decrescente?
Você pode modificar a classificação de bolha para classificar em ordem decrescente alterando a condição de comparação no loop interno. Em vez de trocar elementos se estiverem em ordem crescente (arr[j] > arr[j + 1]), você pode trocá-los se estiverem em ordem decrescente (arr[j]
Como posso tornar o tipo de bolha estável?
Você pode tornar a ordenação por bolhas estável preservando a ordem relativa de elementos iguais. Para fazer isso, você precisa alterar a condição de comparação no loop interno de maior que (>) para maior ou igual a (>=). Isso evitará a troca de elementos iguais e os manterá em suas posições originais.
0517a86e26
Comments