Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
métodos ordenação C, bolha, selection sort e insertion sort
1. M´etodos de Ordena¸c˜ao: Ordena¸c˜ao por Bolha,
Sele¸c˜ao Direta e Inser¸c˜ao
Professor:
Silvio Luiz Bragatto Boss
e-mail:
silvioboss@utfpr.edu.br
Universidade Tecnol´ogica Federal do Paran´a - UTFPR
Coordenac¸˜ao de Inform´atica - COINF
Curso de Engenharia de Computac¸˜ao
Disciplina de Estrutura de Dados I
2. M´etodos de Ordena¸c˜ao
Sum´ario
1 M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Bolhas
Ordena¸c˜ao por Sele¸c˜ao Direta
Ordena¸c˜ao por Inser¸c˜ao
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
3. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
M´etodo de ordena¸c˜ao simples e de entendimento e
implementa¸c˜ao f´aceis;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
4. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
M´etodo de ordena¸c˜ao simples e de entendimento e
implementa¸c˜ao f´aceis;
Bubblesort est´a entre os mais conhecidos e difundidos
m´etodos de ordena¸c˜ao de arranjos;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
5. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
M´etodo de ordena¸c˜ao simples e de entendimento e
implementa¸c˜ao f´aceis;
Bubblesort est´a entre os mais conhecidos e difundidos
m´etodos de ordena¸c˜ao de arranjos;
Por´em n˜ao ´e um algoritmo eficiente, ´e estudado para fins de
desenvolvimento de racioc´ınio.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
6. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O Princ´ıpio do Bubblesort ´e a troca entre posi¸c˜oes
consecutivas, fazendo com que os valores mais altos (ou mais
baixos) “borbulhem” para o final do arranjo (da´ı o nome
Bubblesort);
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
7. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O Princ´ıpio do Bubblesort ´e a troca entre posi¸c˜oes
consecutivas, fazendo com que os valores mais altos (ou mais
baixos) “borbulhem” para o final do arranjo (da´ı o nome
Bubblesort);
Neste exemplo, vamos ordenar o arranjo em ordem crescente
de valores, consideremos inicialmente um arranjo qualquer
desordenado
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
8. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O primeiro passo ´e se fazer a compara¸c˜ao entre os dois
elementos das primeiras posi¸c˜oes :
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
9. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O primeiro passo ´e se fazer a compara¸c˜ao entre os dois
elementos das primeiras posi¸c˜oes :
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
10. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O primeiro passo ´e se fazer a compara¸c˜ao entre os dois
elementos das primeiras posi¸c˜oes :
Assim verificamos que neste caso os dois primeiros elementos
est˜ao desordenados entre si, logo devemos troc´a-los de
posi¸c˜ao. E assim continuamos com as compara¸c˜oes dos
elementos subsequentes:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
11. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O primeiro passo ´e se fazer a compara¸c˜ao entre os dois
elementos das primeiras posi¸c˜oes :
Assim verificamos que neste caso os dois primeiros elementos
est˜ao desordenados entre si, logo devemos troc´a-los de
posi¸c˜ao. E assim continuamos com as compara¸c˜oes dos
elementos subsequentes:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
12. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Aqui, mais uma vez, verificamos que os elementos est˜ao
desordenados entre si. Devemos fazer a troca e continuar
nossas compara¸c˜oes at´e o final do arranjo:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
13. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Aqui, mais uma vez, verificamos que os elementos est˜ao
desordenados entre si. Devemos fazer a troca e continuar
nossas compara¸c˜oes at´e o final do arranjo:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
14. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Ap´os este primeiro passo, que compreende a primeira
passagem pelo arranjo fazendo as compara¸c˜oes e as trocas
necess´arias, verificamos que o maior elemento, o n´umero 5, foi
parar na ´ultima posi¸c˜ao, seu lugar correto no arranjo
ordenado. Pode-se dizer que o n´umero 5 ”borbulhou”3 para a
sua posi¸c˜ao correta, l´a no final do arranjo.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
15. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
O pr´oximo passo agora ser´a repetir nosso processo de
compara¸c˜oes e trocas desde o in´ıcio do arranjo. S´o que dessa
vez o processo n˜ao precisar´a comparar o pen´ultimo com o
´ultimo elemento, pois o ´ultimo n´umero, o n´umero 5, est´a em
sua posi¸c˜ao correta no arranjo. Vamos ao processo :
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
16. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Novamente se compara os dois primeiros elementos do
arranjo. Neste caso, verificamos que ser´a necess´aria a troca
de lugares entre os elementos. Em seguida vamos
continuando as compara¸c˜oes at´e o final
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
17. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Agora precisaremos repetir o processo novamente, mas desta
vez, al´em de n˜ao precisarmos levar em considera¸c˜ao o ´ultimo
elemento do arranjo (no caso o n´umero 5 ) que j´a est´a
ordenado, tamb´em n˜ao precisaremos levar em considera¸c˜ao o
pen´ultimo elemento do arranjo (no caso o n´umero 4) pois ele
tamb´em est´a em sua posi¸c˜ao correta. Vamos ent˜ao continuar
o processo :
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
18. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
Mais uma vez o elemento de maior valor, o n´umero 3,
”borbulhou”para sua posi¸c˜ao correta. Basta agora mais um
processo para que todo o arranjo fique ordenado.
Neste caso o arranjo j´a est´a ordenado devido as disposi¸c˜oes
iniciais de nosso arranjo, mas n˜ao ´e poss´ıvel nosso algoritmo
saber se todo o arranjo est´a ordenado ou n˜ao, e ´e exatamente
por isso que precisaremos realizar mais um processo.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
19. M´etodos de Ordena¸c˜ao
BubbleSort - Ordena¸c˜ao por Bolhas
programa ordena;
var
vetor1 : vetor [1..5] de inteiros;
i, j, aux: inteiro;
in´ıcio
para i de 1 at´e 5 passo 1 fa¸ca
para j de 1 at´e 5-i passo 1 fa¸ca
se vetor1[j] > vetor1[j+1] ent~ao
aux <-- vetor1[j];
vetor1[j] <-- vetor1[j+1];
vetor1[j+1] <-- aux;
fim_se;
fim_para;
fim_para;
fim.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
20. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O met´odo de ordena¸c˜ao por Sele¸c˜ao Direta ´e levemente mais
eficiente que o m´etodo Bubblesort, ainda que se trate de um
algoritmo apenas para estudo e ordena¸c˜ao de pequenos
arranjos;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
21. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O met´odo de ordena¸c˜ao por Sele¸c˜ao Direta ´e levemente mais
eficiente que o m´etodo Bubblesort, ainda que se trate de um
algoritmo apenas para estudo e ordena¸c˜ao de pequenos
arranjos;
A l´ogica consiste em se varrer o arranjo comparando todos os
seus elementos com o primeiro;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
22. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O met´odo de ordena¸c˜ao por Sele¸c˜ao Direta ´e levemente mais
eficiente que o m´etodo Bubblesort, ainda que se trate de um
algoritmo apenas para estudo e ordena¸c˜ao de pequenos
arranjos;
A l´ogica consiste em se varrer o arranjo comparando todos os
seus elementos com o primeiro;
Caso o primeiro elemento esteja desordenado em rela¸c˜ao ao
elemento que est´a sendo comparado com ele no momento, ´e
feita a troca;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
23. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O met´odo de ordena¸c˜ao por Sele¸c˜ao Direta ´e levemente mais
eficiente que o m´etodo Bubblesort, ainda que se trate de um
algoritmo apenas para estudo e ordena¸c˜ao de pequenos
arranjos;
A l´ogica consiste em se varrer o arranjo comparando todos os
seus elementos com o primeiro;
Caso o primeiro elemento esteja desordenado em rela¸c˜ao ao
elemento que est´a sendo comparado com ele no momento, ´e
feita a troca;
Ao se chegar ao final do arranjo, teremos o menor valor ou o
maior, conforme a compara¸c˜ao na primeira posi¸c˜ao do arranjo.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
24. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Embora o n´umero de compara¸c˜oes para o m´etodo da bolha e
para o m´etodo de sele¸c˜ao direta seja o mesmo, o n´umero de
trocas, no caso m´edio, ´e menor para a ordena¸c˜ao por sele¸c˜ao.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
25. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Neste exemplo vamos ordenar o arranjo em ordem crescente
de valores. Consideremos inicialmente um arranjo qualquer
desordenado:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
26. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O passo inicial a se dar ´e comparar o primeiro elemento com
todos os outros elementos do arranjo. Come¸camos
comparando os dois primeiros elementos :
Verifica-se que os dois primeiros elementos est˜ao
desordenados entre si;
Logo devemos troc´a-los de posi¸c˜ao;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
27. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Em seguida continuamos a comparar os outros elementos com
o elemento da primeira posi¸c˜ao.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
28. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Aqui, mais uma vez, verificamos que os elementos est˜ao
desordenados entre si;
A troca ´e feita e as compara¸c˜oes continuam.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
29. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Neste caso percebemos que os elementos j´a est˜ao ordenados
entre si;
N˜ao ´e feita a troca e se continua as compara¸c˜oes.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
30. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Ap´os essa primeira etapa, fizemos com que o menor elemento
do arranjo fosse deslocado para primeira posi¸c˜ao;
O pr´oximo passo ser´a repetir este mesmo procedimento, s´o
que desta vez comparando os elementos do arranjo com o
elemento que est´a na segunda posi¸c˜ao, j´a que a primeira
posi¸c˜ao j´a foi ordenada.
Neste caso ´e feita a troca pois os elementos est˜ao
desordenados entre si;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
31. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
O procedimento segue.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
32. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Perceba que desta vez o segundo menor elemento do arranjo
foi deslocado para a segunda posi¸c˜ao;
O processo continua com a mesma l´ogica, sem comparar
agora o primeiro e o segundo elementos do arranjo, pois eles
j´a est˜ao em suas posi¸c˜oes corretas;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
33. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
Nestes passos o elemento de menor valor, o n´umero 3, foi
deslocado para sua posi¸c˜ao correta. Mais um processo agora e
todo o arranjo ficar´a ordenado:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
34. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Sele¸c˜ao Direta
programa ordena;
var
vetA : vetor [1..5] de inteiros;
i, j, aux: inteiro;
in´ıcio
para i de 1 at´e 4 passo 1 fa¸ca
para j de i + 1 at´e 5 passo 1 fa¸ca
se vetA[j] < vetA[i] ent~ao
aux <-- vetA[j];
vetA[j]; <-- vetA[i];
vetA[i]; <-- aux;
fim_se;
fim_para;
fim_para;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
35. M´etodos de Ordena¸c˜ao
Ordena¸c˜ao por Inser¸c˜ao
para j de 2 at´e n fa¸ca
elemento <-- vetor[j];
i<-- j-1;
enquanto i>0 AND vetor[i]>elemento, fa¸ca
vetor[i+1] <-- vetor[i];
i<-- i-1;
fim_enquanto
vetor[i+1] <- elemento;
fim_para
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX