top of page
Writer's picturepayrardiaprisupnan

Bubble Sort: um algoritmo de ordenação de dados em C++



Bubble Sort em C++: um guia completo




Se você está procurando uma maneira simples e fácil de classificar uma matriz de números em C++, tente a classificação por bolhas. Bubble sort é um dos algoritmos de classificação mais básicos que funciona trocando repetidamente elementos adjacentes se eles estiverem na ordem errada. Neste artigo, você aprenderá o que é o bubble sort, como ele funciona e como implementá-lo em C++. Você também aprenderá sobre a complexidade de tempo, vantagens e desvantagens do tipo de bolha.




bubble sort in c++



O que é tipo de bolha?




Bubble sort é um algoritmo de classificação que compara dois elementos adjacentes e os troca até que estejam na ordem pretendida. O nome vem do fato de que os elementos menores ou maiores gradualmente "borbulham" até a parte superior ou inferior da matriz, dependendo da ordem de classificação. Por exemplo, se você deseja classificar uma matriz de números em ordem crescente, a classificação por bolhas moverá os menores números para a esquerda e os maiores para a direita.


Como funciona a classificação por bolhas?




O Bubble sort funciona iterando sobre o array da esquerda para a direita, comparando cada par de elementos adjacentes e trocando-os se estiverem fora de ordem. Esse processo é repetido até que não sejam necessárias mais trocas, o que significa que o array está classificado. Vamos ver como a classificação por bolhas funciona com um exemplo.


Exemplo de classificação por bolha




Suponha que temos uma matriz de cinco números que queremos classificar em ordem crescente: [5, 1, 4, 2, 8]. Aqui está como a ordenação de bolhas classificará esta matriz:


Iteração


Variedade


Trocas


1


[5, 1, 4, 2, 8]


[1, 5, 4, 2, 8], [1, 4, 5, 2, 8], [1, 4, 2, 5, 8]


2


[1, 4, 2, 5, 8]


[1, 2, 4, 5, 8]


3


[1, 2, 4, 5, 8]


Sem trocas


Como você pode ver, após três iterações, a matriz é classificada e não são necessárias mais trocas. O menor número (1) subiu até a primeira posição e o maior número (8) subiu até a última posição.


Complexidade de tempo do tipo de bolha




A complexidade de tempo de um algoritmo é uma medida de quão rápido ele é executado com base no tamanho da entrada. Para classificação por bolhas, a complexidade de tempo do pior caso é O(n), onde n é o número de elementos na matriz.Isso significa que, se o array já estiver classificado na ordem inversa (o pior cenário), o bubble sort terá que fazer n comparações e trocas para classificá-lo. Por exemplo, se n = 10, o Bubble Sort fará 100 comparações e trocas.


A complexidade de tempo de melhor caso de classificação de bolha é O(n), onde n é o número de elementos na matriz. Isso significa que, se o array já estiver classificado (o melhor cenário), o Bubble Sort só precisará fazer n comparações e nenhuma troca para confirmar que está classificado. Por exemplo, se n = 10, o Bubble Sort fará apenas 10 comparações e nenhuma troca.


A complexidade de tempo do caso médio do tipo de bolha também é O(n), onde n é o número de elementos na matriz. Isso significa que, em média, o bubble sort terá que fazer n/2 comparações e swaps para ordenar o array. Por exemplo, se n = 10, o Bubble Sort fará, em média, 50 comparações e trocas.


Vantagens e desvantagens do Bubble Sort




O Bubble sort tem algumas vantagens e desvantagens que você deve conhecer antes de usá-lo. Aqui estão alguns deles:


Vantagens



  • O tipo de bolha é fácil de entender e implementar.



  • A classificação por bolha não requer espaço extra, pois classifica a matriz no local.



  • A classificação por bolha pode detectar se a matriz já está classificada e parar antes.




Desvantagens



  • A classificação por bolhas é muito lenta e ineficiente para grandes matrizes.



  • A classificação por bolha tem um desempenho ruim quando a matriz é classificada principalmente na ordem inversa.



  • O Bubble sort não é estável, o que significa que pode alterar a ordem relativa de elementos iguais.




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 Bubble Sort: uma básica e outra otimizada.


Implementação básica do Bubble Sort




A implementação básica do Bubble Sort em C++ é a seguinte:


#include usando namespace std; // Função para trocar dois elementos void swap(int &a, int &b) int temp = a; a = b; b = temperatura; // Função para realizar a ordenação de bolhas em um array void bubbleSort(int arr[], int n) // Percorrer o array n - 1 vezes for (int i = 0; i arr[j + 1]) // Troque-os se estiverem fora de ordem swap(arr[j], arr[j + 1]); // Função para imprimir um array void printArray(int arr[], int n) // Percorre o array for (int i = 0; i


Explicação do código




O código acima faz o seguinte:


  • Inclui o <iostream> arquivo de cabeçalho para operações de entrada e saída.



  • Ele usa o std namespace para evitar digitação padrão:: antes de cada função de biblioteca padrão.



  • Ele define um trocar função que recebe duas referências a números inteiros e troca seus valores usando uma variável temporária.



  • Ele define um Tipo de bolha função que recebe um array e seu tamanho como parâmetros e executa o bubble sort nele. Ele usa dois loops for aninhados para iterar sobre a matriz e comparar e trocar elementos adjacentes. O loop externo é executado a partir do índice eu = 0 para i = n - 2, onde n é o tamanho da matriz. O loop interno é executado a partir do índice j = 0 para j = n - i - 2, onde eu é a iteração atual do loop externo.Dessa forma, o loop interno pula os elementos já classificados no final do array.



  • Ele define um printArray função que recebe um array e seu tamanho como parâmetros e imprime cada elemento do array separado por um espaço usando um loop for e o cout fluxo.



Ele define um principal função que é o ponto de entrada do programa. Ele faz o seguinte:


  • Ele define uma matriz de cinco números: arr[] = 5, 1, 4, 2, 8.



  • Ele obtém o tamanho do array dividindo o tamanho total do array pelo tamanho de um elemento: n = sizeof(arr) / sizeof(arr[0]).



  • Ele imprime o array original chamando o método printArray função com a matriz e seu tamanho como argumentos: printArray(arr, n).



  • Ele classifica o array usando o tipo de bolha chamando o método Tipo de bolha função com a matriz e seu tamanho como argumentos: BubbleSort(arr, n).



  • Ele imprime a matriz classificada chamando o método printArray função novamente com os mesmos argumentos: printArray(arr, n).




Saída




A saída do programa é a seguinte:


Matriz original: 5 1 4 2 8 Matriz classificada: 1 2 4 5 8


Isso mostra que o programa classificou com sucesso o array usando o Bubble Sort.


Implementação otimizada do Bubble Sort




A implementação básica do tipo de bolha pode ser aprimorada adicionando uma variável de sinalizador que rastreia se alguma troca ocorreu em cada iteração. Se nenhuma troca ocorreu, significa que o array já está classificado e não há necessidade de continuar o loop. Isso pode reduzir o número de comparações e trocas desnecessárias, especialmente quando a matriz já está classificada ou quase classificada. A implementação otimizada do Bubble Sort em C++ é a seguinte:


#include usando namespace std; // Função para trocar dois elementos void swap(int &a, int &b) int temp = a; a = b; b = temperatura; // Função para executar classificação de bolha otimizada em um array void bubbleSort(int arr[], int n) // Declarar uma variável de sinalizador bool swapped; // Percorre o array n - 1 vezes for (int i = 0; i arr[j + 1]) // Troque-os se estiverem fora de ordem swap(arr[j], arr[j + 1]); // Defina o sinalizador como true swapped = true; // Verifica se alguma troca ocorreu if (swapped == false) // Sai do loop se nenhuma troca ocorreu break; // Função para imprimir um array void printArray(int arr[], int n) // Percorre o array for (int i = 0; i


Explicação do código




O código acima faz o seguinte:


  • Inclui o <iostream> arquivo de cabeçalho para operações de entrada e saída.



  • Ele usa o std namespace para evitar digitação padrão:: antes de cada função de biblioteca padrão.



  • Ele define um trocar função que recebe duas referências a números inteiros e troca seus valores usando uma variável temporária.



Ele define um Tipo de bolha função que recebe uma matriz e seu tamanho como parâmetros e executa classificação de bolha otimizada nela.Ele faz o seguinte:


  • Ele declara uma variável flag chamada trocado que indica se alguma troca ocorreu em cada iteração.



  • Ele usa dois loops for aninhados para iterar sobre a matriz e comparar e trocar elementos adjacentes. O loop externo é executado a partir do índice eu = 0 para i = n - 2, onde n é o tamanho da matriz. O loop interno é executado a partir do índice j = 0 para j = n - i - 2, onde eu é a iteração atual do loop externo. Dessa forma, o loop interno pula os elementos já classificados no final do array.



  • Ele inicializa o sinalizador como falso antes de cada loop interno.



  • Ele define o sinalizador como verdadeiro se alguma troca tiver ocorrido no loop interno.



  • Ele verifica se o sinalizador é falso após cada loop interno, o que significa que nenhuma troca ocorreu e o array já está classificado. Nesse caso, ele sai do loop externo e para de classificar.




  • Ele define um printArray função que recebe um array e seu tamanho como parâmetros e imprime cada elemento do array separado por um espaço usando um loop for e o cout fluxo.



  • Ele define um principal função que é o ponto de entrada do programa. Ele faz as mesmas coisas que na implementação básica, exceto que chama a versão otimizada do Bubble Sort em vez da versão básica.



Saída




A saída do programa é a seguinte:


Matriz original: 5 1 4 2 8 Matriz classificada: 1 2 4 5 8


Isso mostra que o programa classificou com êxito a matriz usando classificação de bolha otimizada. Você também pode notar que o programa roda mais rápido que a implementação básica, já que não precisa realizar comparações e trocas desnecessárias quando o array já está ordenado ou quase ordenado.


Conclusão




Bubble sort é um algoritmo de classificação simples e fácil que funciona trocando repetidamente elementos adjacentes se eles estiverem na ordem errada. Ele tem uma complexidade de tempo de pior caso e caso médio de O(n) e uma complexidade de tempo de melhor caso de O(n), onde n é o número de elementos na matriz.Bubble sort é fácil de entender e implementar, mas é muito lento e ineficiente para grandes arrays. Ele também pode ser otimizado usando uma variável de sinalizador para detectar se o array já está classificado e parar antes.


Resumo dos pontos principais




  • O Bubble sort compara dois elementos adjacentes e os troca até que estejam na ordem pretendida.



  • A classificação por bolha move os elementos menores ou maiores gradualmente para a parte superior ou inferior da matriz, dependendo da ordem de classificação.



  • Bubble sort tem uma complexidade de tempo de pior caso e caso médio de O(n) e uma complexidade de tempo de melhor caso de O(n), onde n é o número de elementos na matriz.



  • Bubble sort é fácil de entender e implementar, mas é muito lento e ineficiente para grandes arrays.



  • A classificação por bolha pode ser otimizada usando uma variável de sinalizador para detectar se a matriz já está classificada e parar antes.



perguntas frequentes




  • Quais são algumas aplicações do tipo de bolha?



O Bubble sort pode ser usado para fins educacionais, pois é um dos algoritmos de classificação mais simples de aprender e codificar. Ele também pode ser usado para classificar pequenas matrizes ou matrizes que já estão classificadas ou quase classificadas, pois pode ter um bom desempenho nesses casos.


  • Quais são algumas alternativas para o Bubble Sort?



A classificação por bolhas não é muito eficiente para classificar matrizes grandes ou matrizes que são classificadas principalmente na ordem inversa. Existem muitos outros algoritmos de ordenação que são mais rápidos e eficientes do que a ordenação por bolhas, como ordenação por seleção, ordenação por inserção, ordenação por mesclagem, ordenação rápida, ordenação por heap e ordenação por raiz. Você pode aprender mais sobre esses algoritmos em [este site].


  • Como a ordenação de bolhas pode se tornar estável?



O Bubble sort não é estável, o que significa que pode alterar a ordem relativa de elementos iguais. Por exemplo, se a matriz for [A, B, A, C] e quisermos classificá-la em ordem crescente com base na primeira letra, a classificação por bolha pode trocar os dois A's e resultar em [A, A, B, C] ou [A, B, A, C]. Para tornar a classificação de bolhas estável, precisamos modificar a condição de comparação para evitar a troca de elementos iguais. Em vez de verificar se arr[j] > arr[j + 1], podemos verificar se arr[j] >= arr[j + 1]. Desta forma, apenas trocamos elementos que estão estritamente fora de ordem.


  • Como a classificação por bolhas pode se tornar adaptável?



Bubble sort não é adaptável, o que significa que não tira proveito da ordem existente no array. Por exemplo, se o array for [1, 2, 3, 4, 5, 6, 7, 8], o bubble sort ainda executará n - 1 iterações e n - i - 1 comparações em cada iteração, mesmo que o array já esteja classificado. Para tornar a classificação por bolhas adaptável, podemos usar a mesma variável sinalizadora que usamos para otimizar a classificação por bolhas. Se o sinalizador for falso após qualquer iteração, significa que o array já está classificado e podemos parar de classificar.


  • Como o Bubble Sort pode ser paralelizado?



A classificação por bolhas não é fácil de paralelizar, o que significa que não pode tirar proveito de vários processadores ou núcleos para acelerar o processo de classificação. Isso ocorre porque o tipo de bolha depende de comparações sequenciais e trocas de elementos adjacentes, que são difíceis de dividir entre diferentes threads ou processos. No entanto, existem algumas variações de classificação de bolhas que podem ser paralelizadas até certo ponto, como classificação de transposição ímpar-par e classificação de coqueteleira. Você pode aprender mais sobre essas variações em [este site].


  • Como o tipo de bolha pode ser visualizado?



A classificação de bolhas pode ser visualizada usando um gráfico de barras ou um gráfico de pontos para representar os elementos da matriz. A altura ou posição de cada barra ou ponto corresponde ao valor de cada elemento. À medida que o tipo de bolha troca os elementos adjacentes, as barras ou pontos se movem de acordo. Você pode ver uma visualização interativa do tipo de bolha em [este site].


0517a86e26


0 views0 comments

Recent Posts

See All

Comments


bottom of page