Bubble Sort: um algoritmo de classificação simples, mas ineficiente
Bubble sort é um dos algoritmos de classificação mais simples que funciona trocando repetidamente os elementos adjacentes se eles estiverem na ordem errada. É fácil de entender e implementar, mas é muito lento e ineficiente para grandes conjuntos de dados. Neste artigo, aprenderemos sobre o algoritmo Bubble Sort, sua análise de complexidade, suas vantagens e desvantagens, suas aplicações, sua otimização e sua comparação com outros algoritmos de ordenação.
bubble sort
Download Zip: https://jinyurl.com/2vSQQB
O que é Bubble Sort?
Bubble sort é um algoritmo de classificação que compara dois elementos adjacentes e os troca até que estejam na ordem pretendida. Assim como o movimento das bolhas de ar na água que sobem à superfície, cada elemento da matriz se move para o final em cada iteração. Portanto, é chamado de tipo de bolha. Também é referido como classificação por comparação ou afundamento.
Como funciona o Bubble Sort?
Suponha que estamos tentando classificar os elementos em ordem crescente. O algoritmo funciona da seguinte maneira:
A partir do primeiro índice, compare o primeiro e o segundo elementos. Se o primeiro elemento for maior que o segundo elemento, eles serão trocados.
Agora, compare o segundo e o terceiro elementos. Troque-os se não estiverem em ordem.
O processo acima continua até o último elemento.
Após cada iteração, o maior elemento entre os elementos não classificados é colocado no final.
A cada iteração, a comparação ocorre até o último elemento não classificado.
A matriz é classificada quando todos os elementos não classificados são colocados em suas posições corretas.
Aqui está um exemplo de tipo de bolha visualizado:
A imagem acima mostra como o bubble sort funciona em uma matriz de 6 elementos. As barras vermelhas indicam os elementos que estão sendo comparados e trocados. As barras verdes indicam os elementos que já estão ordenados. O número de iterações é igual ao número de elementos menos um.
Pseudocódigo de Bubble Sort
Aqui está um pseudocódigo do algoritmo de classificação de bolhas:
procedimento bubbleSort(A : lista de itens classificáveis) n := length(A) for i := 0 a n-1 inclusive do for j := 0 to n-i-1 inclusive do //os elementos não estão na ordem correta if A[j] > A[j+1] então //troca os elementos swap(A[j], A[j+1]) end if end for end for end procedimento
Análise de Complexidade do Bubble Sort
Nesta seção, analisaremos a complexidade de tempo e espaço do algoritmo Bubble Sort.
Complexidade de tempo
A complexidade de tempo de um algoritmo é uma medida de quanto tempo leva para executar com base no tamanho da entrada. A complexidade de tempo do tipo de bolha depende de quantas comparações e trocas ele executa em cada iteração.
A complexidade de tempo de pior caso do tipo de bolha é O(N), onde N é o número de elementos na matriz. Isso acontece quando a matriz está na ordem inversa e cada elemento precisa ser trocado em cada iteração.
A complexidade de tempo de melhor caso de classificação de bolha é O(N), onde N é o número de elementos na matriz. Isso acontece quando o array já está classificado e nenhuma troca é necessária em nenhuma iteração.
A complexidade de tempo de caso médio do tipo de bolha também é O(N), onde N é o número de elementos na matriz. Isso acontece quando o array está parcialmente ordenado e algumas trocas são necessárias em algumas iterações.
Aqui está uma tabela que resume a complexidade de tempo do Bubble Sort:
Caso
Complexidade de tempo
Pior
SOBRE)
Melhor
SOBRE)
Média
SOBRE)
Complexidade Espacial
A complexidade de espaço de um algoritmo é uma medida de quanto espaço extra ele requer para executar com base no tamanho da entrada. A complexidade espacial do tipo de bolha é O(1), o que significa que requer uma quantidade constante de espaço extra, independentemente do tamanho da entrada. Isso ocorre porque o tipo de bolha usa apenas uma variável temporária para trocar os elementos e não requer nenhuma estrutura de dados adicional.
Vantagens e Desvantagens do Bubble Sort
Nesta seção, discutiremos os prós e contras do algoritmo Bubble Sort.
Vantagens
O tipo de bolha é fácil de entender e implementar. Não requer nenhuma lógica complexa ou estruturas de dados.
O Bubble sort é estável, o que significa que ele preserva a ordem relativa de elementos iguais na matriz. Isso é importante para alguns aplicativos que dependem da ordem original dos dados.
O Bubble sort pode detectar se o array já está classificado na primeira iteração e interromper o processo de classificação. Isso o torna eficiente para matrizes quase classificadas.
O Bubble sort não requer muito espaço extra. Ele usa apenas uma variável temporária para trocar os elementos.
Desvantagens
O Bubble sort é muito lento e ineficiente para grandes conjuntos de dados. Ele tem uma complexidade de tempo quadrática, o que significa que leva muito mais tempo para classificar à medida que o tamanho da entrada aumenta.
A classificação por bolha realiza muitas comparações e trocas desnecessárias, mesmo que o array esteja parcialmente classificado. Ele não se adapta à ordem existente dos dados.
O Bubble sort não é adequado para computação paralela ou distribuída. Ele não pode tirar proveito de vários processadores ou máquinas para acelerar o processo de classificação.
Bubble sort não é amplamente usado em aplicações do mundo real. Existem muitos outros algoritmos de classificação que são mais rápidos e eficientes do que o Bubble Sort.
Aplicações do Bubble Sort
Apesar de suas desvantagens, o Bubble Sort pode ser útil para algumas aplicações específicas. aqui estão alguns exemplos:
O Bubble sort pode ser usado para ensinar os conceitos básicos de algoritmos de classificação para iniciantes. Isso os ajuda a entender como a comparação e a troca funcionam e como analisar a complexidade de um algoritmo.
A classificação por bolhas pode ser usada para classificar pequenos conjuntos de dados que já estão quase classificados. Ele pode funcionar bem nesses casos, pois pode detectar a ordem classificada na primeira iteração e interromper o processo de classificação.
A classificação por bolhas pode ser usada para classificar dados armazenados em uma lista encadeada ou em uma matriz com memória limitada.Não requer nenhum espaço extra ou estruturas de dados para realizar a classificação.
A classificação por bolha pode ser usada para implementar outros algoritmos de classificação, como classificação por coqueteleira, classificação por pente ou classificação por gnome. Esses algoritmos são variações do bubble sort que melhoram seu desempenho modificando alguns aspectos de sua lógica.
Otimização do Bubble Sort
Nesta seção, aprenderemos como otimizar o algoritmo Bubble Sort para melhorar seu desempenho.
Como otimizar o Bubble Sort?
Uma maneira de otimizar a ordenação de bolhas é acompanhar a última posição trocada em cada iteração. Esta posição indica o limite dos elementos não classificados na matriz. Portanto, não precisamos comparar ou trocar nenhum elemento além dessa posição na próxima iteração. Isso reduz o número de comparações e trocas e melhora a complexidade de tempo da classificação de bolhas.
Pseudocódigo de Bubble Sort otimizado
Aqui está um pseudocódigo do algoritmo de ordenação de bolhas otimizado:
procedimento OptimizedBubbleSort(A : lista de itens classificáveis) n := length(A) //inicializar o limite como n-1 limite := n-1 //repetir até que nenhuma troca seja feita repeat //inicializar um sinalizador para indicar se qualquer troca foi feita swapped := false //inicializar um novo limite como 0 newBoundary := 0 for i := 0 para o limite-1 inclusive do //os elementos não estão na ordem correta se A[i] > A[i+1] então //s wap os elementos swap(A[i], A[i+1]) //defina o sinalizador como verdadeiro //atualize o novo limite como i newBoundary := i end if end for //atualize o limite como o novo limite border := newBoundary até que não seja trocado procedimento final
Comparação com outros Algoritmos de Ordenação
Nesta seção, compararemos a classificação por bolha com alguns outros algoritmos de classificação comuns, como classificação por seleção, classificação por inserção, classificação por mesclagem e classificação rápida.Vamos compará-los com base em sua complexidade de tempo, complexidade de espaço, estabilidade e adaptabilidade.
Algoritmo
Complexidade de tempo
Complexidade Espacial
Estabilidade
Adaptabilidade
Tipo de bolha
SOBRE)
O(1)
Sim
Não
Classificação de seleção
SOBRE)
O(1)
Não
Não
Ordenação por Inserção
SOBRE)
O(1)
Sim
Sim
Mesclar Ordenar
O(N log N)
SOBRE)
Sim
Não
Ordenação rápida
O(N log N)
O(log N)
Não
Não
Como podemos ver na tabela, o Bubble Sort não é muito eficiente em comparação com outros algoritmos de classificação. Tem a mesma complexidade de tempo quadrática que a classificação por seleção e a classificação por inserção, mas é menos estável e menos adaptável. Também é muito mais lento que o merge sort e o quick sort, que possuem complexidade de tempo logarítmica, mas requer menos espaço. Portanto, o Bubble Sort é adequado apenas para conjuntos de dados pequenos e quase classificados.
Conclusão
Bubble sort é um algoritmo de classificação simples, mas ineficiente, que funciona trocando repetidamente os elementos adjacentes se eles estiverem na ordem errada. Tem uma complexidade de tempo quadrática, uma complexidade de espaço constante e um comportamento estável. Ele pode ser otimizado acompanhando a última posição trocada em cada iteração. Pode ser útil para algumas aplicações específicas, como ensino, classificação de conjuntos de dados pequenos e quase classificados, classificação de dados em uma lista vinculada ou uma matriz com memória limitada e implementação de outros algoritmos de classificação. No entanto, não é amplamente utilizado em aplicações do mundo real, pois existem muitos outros algoritmos de classificação que são mais rápidos e eficientes do que o Bubble Sort.
perguntas frequentes
Aqui estão algumas perguntas frequentes sobre o Bubble Sort:
Por que o tipo de bolha é chamado de tipo de bolha?
O tipo de bolha é chamado de tipo de bolha porque se assemelha ao movimento de bolhas de ar na água que sobem à superfície. Cada elemento da matriz se move para o final de cada iteração como uma bolha.
O Bubble Sort é um bom algoritmo?
O Bubble sort não é um bom algoritmo para grandes conjuntos de dados, pois é muito lento e ineficiente.Ele executa muitas comparações e trocas desnecessárias, mesmo que o array esteja parcialmente classificado. Ele não se adapta à ordem existente dos dados. Também não é adequado para computação paralela ou distribuída. No entanto, pode ser bom para algumas aplicações específicas, como ensino, classificação de conjuntos de dados pequenos e quase classificados, classificação de dados em uma lista vinculada ou uma matriz com memória limitada e implementação de outros algoritmos de classificação.
Como podemos melhorar a classificação por bolhas?
Podemos melhorar a classificação de bolhas otimizando-a para reduzir o número de comparações e trocas. Uma maneira de otimizar a ordenação de bolhas é acompanhar a última posição trocada em cada iteração. Esta posição indica o limite dos elementos não classificados na matriz. Portanto, não precisamos comparar ou trocar nenhum elemento além dessa posição na próxima iteração.
Quais são algumas variações do tipo de bolha?
Algumas variações de tipo de bolha são tipo de coqueteleira, tipo de pente e tipo de gnomo. Esses algoritmos são baseados em classificação de bolhas, mas modificam alguns aspectos de sua lógica para melhorar seu desempenho.
Quais são algumas alternativas para o Bubble Sort?
Algumas alternativas para classificação por bolha são classificação por seleção, classificação por inserção, classificação por mesclagem e classificação rápida. Esses algoritmos são mais rápidos e eficientes do que o Bubble Sort para grandes conjuntos de dados. Eles têm diferentes complexidades de tempo e espaço, estabilidade e adaptabilidade.
0517a86e26
Comentarios