Buscar

bubblesort

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

��� ������� 	�
�����
�������
����������ff��fi�fl�ffi! � "� �$#%���&	
'
�(�&��ffi����ff�)�*�+
���,����*�-�&��
.�������+/�/ ,�0��)�1���
1 de 4 
 
1. Ordenação: Método das Bolhas (Bubble Sort) 
 
1.1. Ideia Básica 
 
Este processo de ordenação é o processo mais simples de entender, mais fácil de 
implementar, e talvez o método de ordenação mais conhecido. Contudo, este 
método não se trata de um algoritmo eficiente, ele é estudado principalmente para 
fins de desenvolvimento de raciocínio. 
O princípio básico deste método consiste na troca de valores entre posições 
consecutivas, fazendo com que os valores mais altos (ou mais baixos) salte
"borbulhem" para o fim do conjunto. 
 
1.2. Método 
 
Neste método, pretende -se ordenar os elementos de um array, que vão ser 
ordenados desde a primeira posição até à última posição, na qual em cada iteração 
da ordenação é calculado o maior/menor (maior elemento para ordenação por 
ordem decrescente, menor caso contrário) valor dos elementos que ainda faltam 
ordenar. O processo repete -se até que todos os elementos do array estejam 
ordenados. 
 
Para ordenar os seguintes dados por ordem crescente, processa-se do seguint
modo: 
10 8 6 2 16 4 18 11 14 12 
 
 Comparação dos dois elementos e trocar 
8 10 6 2 16 4 18 11 14 12 
 
 Comparação dos dois elementos e trocar 
 
8 6 10 2 16 4 18 11 14 12 
 
 Comparação dos dois elementos e trocar 
 
2�3 4�5�6�7 8�9�5�:�;�<�=�6�;�<�>�?�@�Aff5�B�C�D!E�E"3 <$F%5�6&8
G
7(>&4�D�?�4ff<)>*:+;�<�H�6�5*4-6&?�9.?�@�A�5+I�I H�J�4)71>�?
2 de 4 
 
 
O processo continua até alcançar o fim do array, omento em que inicia a próxim
iteração do processo de ordenação. 
 
No final da 1ª iteração o array fica do seguinte modo: 
 
8 6 2 10 4 16 11 14 12 18 
 
ficando o maior elemento em último lugar. Pode -se dizer que o elemento n.º 18 
saltou “borbulhou” para a s ua posição correcta. 
O processo volta a repetir-se deste o inicio, só que desta vez o processo pode parar 
antes do elemento n.º18 dado que este já se encontra no lugar correcto. 
 
Vamos continuar mais um passo no processo de ordenação: 
8 6 2 10 4 16 11 14 12 18 
 
 Comparação dos dois elementos e troca 
 
6 8 2 10 4 16 11 14 12 18 
 
Comparação dos dois elementos e troca 
 
6 2 8 10 4 16 11 14 12 18 
 
. . . 
O processo continua até que todo o array esteja ordenado. 
 
1.3. Algoritmo 
 
1. Percorrer todo o array des e o inicio até ao fim 
2. Verificar dois a dois todos os elementos e trocá-los se: 
“1º elemento for maior que 2º elemento” 
3. Voltar ao passo 1. se o array ainda não se encontrar ordenado. 
 
 
 
 
 
 
 
 
K�L M�N�O�P Q�R�N�S�T�U�V�O�T�U�W�X�Y�ZffN�[�\�]!^�^"L U$_%N�O&Q
`
P(W&M�]�X�MffU)W*S+T�U�a�O�N*M-O&X�R.X�Y�Z�N+b�b a�c�M)P1W�X
3 de 4 
 
 
1.4. Eficiência 
 
Tempos de Ordenação (sendo N o número de elementos a ordenar) 
• Melhor caso = N2 
• Média = N2 
• Pior caso = N2 
 
 
1.5. Implementação em C++ 
 
void BubbleSort(int array[], int num_elem) 
{ int aux; // Variável auxiliar para fazer a troca, caso necessário 
 for ( long int i=0; i <= num_elem -2; i++ ) 
 { 
 for ( long int j=0; j<= num_elem –2 -i; j++ ) 
 { 
 if ( array[j] > array[j+1] ) // Caso o elemento de uma posição meno 
 { // for maior que um elemento de uma posição 
 aux = array[j]; // maior, faz a troca. 
 array[ j] = array[j+1]; 
 array[j+1] = aux; 
 } // if 
 } // fo 
 } // fo 
} 
 
 
 
1.6. Exemplo 
 
Array com 10 elementos a ordenar por ordem crescente. 
10 8 6 2 16 4 18 11 14 12 
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 
 
1º passo de ordenação: 
Comparar: dados[0] > dados[1] e trocar se verdade 
8 10 6 2 16 4 18 11 14 12 
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 
 
 
 
 
 
d�e f�g�h�i j�k�g�l�m�n�o�h�m�n�p�q�r�sffg�t�u�v!w�w"e n$x%g�h&j
y
i(p&f�v�q�fffn)p*l+m�n�z�h�g*f-h&q�k.q�r�s�g+{�{ z�|�f)i1p�q
4 de 4 
 
 
2º passo de ordenação: 
Comparar: dados[1] > dados[2] e trocar se verdade 
8 6 10 2 16 4 18 11 14 12 
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 
 
3º passo de ordenação: 
Comparar: dados[2] > dados[3] e trocar se verdade 
8 6 2 10 16 4 18 11 14 12 
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 
 
4º passo de ordenação: 
Comparar: dados[3] > dados[4] e trocar se verdade 
8 6 2 10 16 4 18 11 14 12 
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 
 
 
Nota: 
O processo repete-se até que todos os elementos do array estejam ordenados. 
 
 
 
1.7. Resumo 
 
Método de ordenação extremamente lento, independente da ordem pela qual os 
elementos a ordenar se encontram.

Outros materiais