A aula apresenta o algoritmo de ordenação Bubble Sort, discutindo sua implementação, complexidade computacional e exemplo animado. O Bubble Sort ordena um vetor realizando trocas sucessivas dos elementos, "bubble up" o maior valor até o fim do vetor.
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Bubble Sort
1. Universidade Presbiteriana Mackenzie
Aula
3:
Bubble
Sort
Prof. Ms. Daniel Arndt Alves
Faculdade
de
Computação
e
Informá;ca
Computação e Informática
Faculdade de
Estrutura
de
Dados
II
Daniel
Arndt
Alves
Bubble
Sort
1
2. Tópicos
da
Aula
• Ordenação
de
Vetores
• Algoritmos
de
Ordenação
• Bubble
Sort
• Complexidade
Computacional
• Exemplo
Animado
• Observações
Daniel
Arndt
Alves
Bubble
Sort
2
3. Ordenação de Vetores
• Por vezes é necessário ordenar um vetor de
forma crescente ou decrescente.
• Por vezes é necessário que as strings
contidas num vetor estejam ordenadas
alfabeticamente.
• Algoritmos de ordenação são fáceis de
adaptar de forma a ordenar qualquer que
seja a ordem que se pretende.
Daniel
Arndt
Alves
Bubble
Sort
3
4. Algoritmos
de
Ordenação
• Ordenação
=
Sort
• Rearranjar
os
elementos
de
um
array
(banco
de
dados)
de
modo
a
que
obedeçam
a
um
certo
critério
de
ordem.
– Ordem
numérica
– Ordem
lexicográfica
Daniel
Arndt
Alves
Bubble
Sort
4
6. Algoritmos
de
Ordenação
• Metodologias:
troca,
inserção,
seleção,
intercalação,
distribuição
de
chaves
– Chave:
componente
de
uma
estrutura,
ou
de
um
registro
de
banco
de
dados,
segundo
o
qual
se
realiza
a
ordenação.
Daniel
Arndt
Alves
Bubble
Sort
6
7. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
7
512354277 101
1 2 3 4 5 6
8. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
8
512354277 101
1 2 3 4 5 6
Swap42 77
9. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
9
512357742 101
1 2 3 4 5 6
Swap35 77
10. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
10
512773542 101
1 2 3 4 5 6
Swap12 77
11. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
11
577123542 101
1 2 3 4 5 6
Não há necessidade de swap
12. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
12
577123542 101
1 2 3 4 5 6
Swap5 101
13. Bubble
Sort
• Percorrer
a
coleção
e
elementos
– Movimentação
do
início
ao
fim
do
vetor
– “Bubble” o
maior
valor
ao
final
do
vetor
uYlizando
pares
de
comparações
e
trocas
Daniel
Arndt
Alves
Bubble
Sort
13
77123542 5
1 2 3 4 5 6
101
Maior valor posicionado corretamente
14. Bubble
Sort
• Note
que
somente
o
elemento
de
maior
valor
está
posicionado
corretamente
• Todos
os
demais
valores
conYnuam
fora
de
ordem
• Então,
precisamos
repeYr
este
processo
Daniel
Arndt
Alves
Bubble
Sort
14
77123542 5
1 2 3 4 5 6
101
Maior valor posicionado corretamente
15. Bubble
Sort
• RepeYr
quantas
vezes?
– Se
temos
N
elementos…
– Se,
a
cada
iteração,
nós
posicionamos
um
elemento
corretamente…
– Então
nós
repeYmos
o
processo
N
–
1
vezes.
– Desta
forma,
garanYmos
o
correto
posicionamento
dos
N
elementos.
Daniel
Arndt
Alves
Bubble
Sort
15
18. Bubble
Sort
• Na
Nésima
iteração, precisamos apenas de
MAX-‐N
comparações.
• Por
exemplo:
– Esa
é
a
4a
iteração
– MAX
é
6
– Precisamos
apenas
de
2
comparações
Daniel
Arndt
Alves
Bubble
Sort
18
4253512 77
1 2 3 4 5 6
101
19. Bubble
Sort
public class Sort {
public void bubbleSort(int[] v, int n){
int j, k, limit;
limit = n-1
while (true){
k = 0;
for (j = 0; j <= limit - 1; j++){
if (v[j] > v[j+1]){
swap(v, j, j+1);
k = j;
}
}
if (k == 0)
break;
limit = k;
}
}
}
Daniel
Arndt
Alves
Bubble
Sort
19
20. O
Método
swap
/**
* Troca a posição de dois elementos de um array de inteiros
* @param v um int array
* @param i índice do elemento a ser trocado
* @param j índice do elemento a ser trocado
*/
public void swap(int[] v, int i, int j){
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
Daniel
Arndt
Alves
Bubble
Sort
20
21. Sobrecarga
public void bubbleSort(int[] v){
bubbleSort(v, v.length);
}
Daniel
Arndt
Alves
Bubble
Sort
21
22. Invocando
o
método
bubbleSort
public static void main(String[] args){
Sort sort = new Sort();
int[] v;
v = new int[50];
...
sort.bubbleSort(v);
...
int n = umValor;
sort.bubbleSort(v, n);
}
Daniel
Arndt
Alves
Bubble
Sort
22
23. Complexidade
Computacional
• Complexidade
no
tempo:
comportamento
do
algoritmo
no
tempo,
em
função
do
tamanho
da
entrada.
• Complexidade
no
espaço:
consumo
de
memória
do
algoritmo,
em
função
do
tamanho
da
entrada.
Daniel
Arndt
Alves
Bubble
Sort
23
24. Complexidade
Computacional
• Bubble
Sort:
o
tempo
gasto
na
execução
do
algoritmo
varia
em
ordem
quadráYca
em
relação
ao
número
de
elementos
a
serem
ordenados.
– T
=
O(n2)
–
Notação
“Big
O”
– AYvidades
mais
custosas:
• Comparações
• Trocas
de
Posição
(swap)
Daniel
Arndt
Alves
Bubble
Sort
24
25. Complexidade
Computacional
• Análise
informal
com
base
na
operação
mais
custosa,
que
é
a
comparação
– n
etapas
no
pior
caso
– Na
primeira
etapa,
são
feitas
n-‐1
comparações
e
trocas,
na
segunda
n-‐2
e
assim
por
diante.
– Temos
então,
a
soma
dos
termos
de
uma
progressão
aritméYca:
• (n-‐1)
+
(n-‐2)
+
…
+
1
•
Daniel
Arndt
Alves
Bubble
Sort
25
Total =
n⋅ n −1( )
2
⇒ O n2
( )
26. Complexidade
Computacional
• Melhor
caso:
vetor
ordenado
• Pior
caso:
vetor
inverYdo
Daniel
Arndt
Alves
Bubble
Sort
26
27. Exemplo
Animado
674523 14 6 3398 42
1 2 3 4 5 6 7 8
to_do
index
7
N 8 fez_swap true
Daniel
Arndt
Alves
Bubble
Sort
27
28. Exemplo
Animado
674523 14 6 3398 42
1 2 3 4 5 6 7 8
to_do
index
7
1
N 8 fez_swap false
Daniel
Arndt
Alves
Bubble
Sort
28
85. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
2
N 8 fez_swap true
Daniel
Arndt
Alves
Bubble
Sort
85
86. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
2
N 8 fez_swap true
No Swap
Daniel
Arndt
Alves
Bubble
Sort
86
87. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
3
N 8 fez_swap true
Daniel
Arndt
Alves
Bubble
Sort
87
88. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
3
N 8 fez_swap true
No Swap
Daniel
Arndt
Alves
Bubble
Sort
88
89. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
4
N 8 fez_swap true
Daniel
Arndt
Alves
Bubble
Sort
89
90. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
4
N 8 fez_swap true
No Swap
Daniel
Arndt
Alves
Bubble
Sort
90
91. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
5
N 8 fez_swap true
Fim da Quarta Iteração
Daniel
Arndt
Alves
Bubble
Sort
91
92. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
1
N 8 fez_swap false
Daniel
Arndt
Alves
Bubble
Sort
92
93. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
1
N 8 fez_swap false
No Swap
Daniel
Arndt
Alves
Bubble
Sort
93
94. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
2
N 8 fez_swap false
Daniel
Arndt
Alves
Bubble
Sort
94
95. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
2
N 8 fez_swap false
No Swap
Daniel
Arndt
Alves
Bubble
Sort
95
96. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
3
N 8 fez_swap false
Daniel
Arndt
Alves
Bubble
Sort
96
97. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
3
N 8 fez_swap false
No Swap
Daniel
Arndt
Alves
Bubble
Sort
97
98. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
4
N 8 fez_swap false
Fim da Quinta Iteração
Daniel
Arndt
Alves
Bubble
Sort
98
99. Exemplo
Animado
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
4
N 8 fez_swap false
Não foi realizado nenhum swap
então, todos os elementos já
encontram-se nas posições
corretas.
Nós podemos “pular” os dois
últimos passos do loop externo.
Daniel
Arndt
Alves
Bubble
Sort
99
100. Observações
• O
algoritmo
é
estável,
isto
é,
os
registros
com
chaves
iguais
nem
sempre
irão
manter
a
mesma
posição
relaYva
de
antes
do
início
da
ordenação
Daniel
Arndt
Alves
Bubble
Sort
100