SlideShare uma empresa Scribd logo
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 1 de 18
BUBBLE SORT
Bubble Sort é um algoritmo de ordenação que pode ser aplicado em Arrays e Listas
dinâmicas. Se o objetivo é ordenar os valores em forma decrescente, então, a posição atual é
comparada com a próxima posição e, se a posição atual for maior que a posição posterior, é
realizada a troca dos valores nessa posição. Caso contrário, não é realizada a troca, apenas
passa-se para o próximo par de comparações.
Se o objetivo é ordenar os valores em forma crescente, então, a posição atual é
comparada com a próxima posição e, se a posição atual for menor que a posição posterior, é
realizada a troca. Caso contrário, a troca não é feita e passa-se para o próximo par de
comparação.
Um array ou lista pode estar já ordenado no momento em que se solicita a ordenação,
dessa forma, esta situação tem de ser considerada na implementação do algoritmo. Assim,
demonstrarei a representação gráfica e o teste de mesa das duas situações usando array.
1. VETOR DESORDENADO
Suponha o seguinte vetor chamado V:
Índice 0 1 2 3 4
elemento 200 10 0 5 30
posição i i+1 i+2 i+3 i+4
Vamos utilizá-lo para analisar e testar o comportamento deste algoritmo. Apenas
reforçando que em Linguagem C o vetor começa na posição 0. Utilizamos o comando de controle
FOR para manipular vetores, então, aqui implementaremos um for que irá da posição 0 até a
posição 4 e será incrementado de 1, iniciando em zero. Dessa forma conseguimos obter o valor
dos elementos das posições que serão comparadas usando o comando de controle IF e,
conforme a ordem desejada fazer a troca se for necessária.
Para que não ocorra repetição desnecessária, utilizaremos uma FLAG, que nos avisará
quando o vetor estará ordenado e, assim, a execução será terminada. Essa FLAG sempre será
setada com 1 quando houver uma troca. Dessa forma, enquanto n for menor ou igual ao tamanho
do vetor e, ao mesmo tempo a FLAG for igual a 1, então, deve-se continuar ordenando, caso
contrário, o vetor estará ordenado.
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 2 de 18
1.1. ORDENANDO DE FORMA CRESCENTE
1.ª Passagem no While:
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 0 5 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[0] >= V[1]
200 >= 10
V
aux = V[i]
aux = V[0]
aux = 200
V[i] = V[i+1]
V[0] = V[1]
V[0] = 10
V[i+1] = aux;
V[1] = aux;
V[1] = 200
Estado do vetor após a troca:
0 1 2 3 4
10 200 0 5 30
i i+1 i+1 i+1 i+1
i = 1; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
10 200 0 5 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[1] >= V[2]
200 >= 0
V
aux = V[i]
aux = V[1]
aux = 200
V[i] = V[i+1]
V[1] = V[2]
V[1] = 0
V[i+1] = aux;
V[2] = aux;
V[2] = 200
Estado do vetor após a troca:
0 1 2 3 4
10 0 200 5 30
i i+1 i+1 i+1 i+1
i = 2; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
10 0 200 5 30
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 3 de 18
Verifica Troca = 1
V[i] >= V[i+1]
V[2] >= V[3]
200 >= 5
V
aux = V[i]
aux = V[2]
aux = 200
V[i] = V[i+1]
V[2] = V[3]
V[2] = 5
V[i+1] = aux;
V[3] = aux;
V[3] = 200
Estado do vetor após a troca:
0 1 2 3 4
10 0 5 200 30
i i+1 i+1 i+1 i+1
i = 3; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
10 0 5 200 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[3] >= V[4]
200 >= 30
V
aux = V[i]
aux = V[3]
aux = 200
V[i] = V[i+1]
V[3] = V[4]
V[3] = 30
V[i+1] = aux;
V[4] = aux;
V[4] = 200
Estado do vetor após a troca:
0 1 2 3 4
10 0 5 30 200
i i+1 i+1 i+1 i+1
i = 4; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
10 0 5 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[4] >= V[5]
200 >= ?
F
Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma
crescente. Portanto, a execução do While continua.
2.ª Passagem no While
i = 0; troca = 1;
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 4 de 18
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
10 0 5 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[0] >= V[1]
10 >= 0
V
aux = V[i]
aux = V[0]
aux = 10
V[i] = V[i+1]
V[0] = V[1]
V[0] = 10
V[i+1] = aux;
V[1] = aux;
V[1] = 10
Estado do vetor após a troca:
0 1 2 3 4
0 10 5 30 200
i i+1 i+1 i+1 i+1
i = 1; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 10 5 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[1] >= V[2]
10 >= 5
V
aux = V[i]
aux = V[1]
aux = 10
V[i] = V[i+1]
V[1] = V[2]
V[1] = 5
V[i+1] = aux;
V[2] = aux;
V[2] = 10
Estado do vetor após a troca:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
i = 2; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[2] >= V[3]
10 >= 30
F
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 5 de 18
i = 3; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[3] >= V[4]
30 >= 200
F
i = 4; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] >= V[i+1]
V[4] >= V[5]
200 >= ?
F
Chegamos ao fim do Vetor com o FOR, entretanto, apesar do vetor já estar ordenado de
forma crescente, é preciso ainda que o WHILE passe mais uma vez pois TROCA ainda vale 1.
A confirmação de que o vetor está ordenado será dado TROCA for setado como zero. Como o
vetor está ordenado, então, o FOR correrá todas as posições, mas não entrará no IF, que é o
onde TROCA é setada como 1.
3.ª Passagem no While
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[0] >= V[1]
0 >= 5
F
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 6 de 18
i = 1; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[1] >= V[2]
5 >= 10
F
i = 2; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[2] >= V[3]
10 >= 30
F
i = 3; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[3] >= V[4]
30 >= 200
F
i = 4; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[4] >= V[5]
200 >= ? F
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 7 de 18
O algoritmo terminou de executar, troca é igual a 0, portanto o vetor está ordenado.
1.1.1. CÓDIGO FONTE
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
void imprimir();
int i, aux, troca, numero[5];
int main()
{
setlocale(LC_ALL, "Portuguese");
printf("n--------------------------------------------");
printf("nEXEMPLO BUBBLE SORT CRESCENTE");
printf("n--------------------------------------------");
printf("nInicializando o Array");
for(i=0; i<5; i++)
{
numero[i] = 0;
}
imprimir();
printf("n--------------------------------------------");
printf("nInserindo valores no Arrayn");
for(i=0; i<5; i++)
{
printf("n|Posição %d |Digite um número: t", i);
scanf("%d%*c",&numero[i]);
}
printf("n--------------------------------------------");
printf("nValores armazenados no array");
imprimir();
printf("n--------------------------------------------");
printf("nOrdenando o Array");
troca = 1;
while (troca == 1)
{
troca = 0; for (i = 0; i <= 3; i++)
{
if (numero[i] > numero[i + 1])
{
troca = 1;
aux = numero[i];
numero[i] = numero[i + 1];
numero[i + 1] = aux;
}
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 8 de 18
}
}
printf("n--------------------------------------------");
printf("nValores ordenados");
imprimir();
printf("n--------------------------------------------");
return 0;
}
void imprimir()
{
printf("n--------------------------------------------");
for (i=0; i<5; i++)
{
printf("n|Posicao: %d | Número: %d|", i, numero[i]);
}
}
1.2. ORDENANDO DE FORMA DECRESCENTE
1.ª Passagem no While
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 0 5 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[0] <= V[1]
200 <= 10
F
i = 1; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 0 5 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[1] <= V[2]
10 <= 0
F
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 9 de 18
i = 2; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 0 5 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[2] <= V[3]
0 <= 5
V
aux = V[i]
aux = V[2]
aux = 0
V[i] = V[i+1]
V[2] = V[3]
V[2] = 5
V[i+1] = aux;
V[3] = aux;
V[3] = 0
Estado do vetor após a troca:
0 1 2 3 4
200 10 5 0 30
i i+1 i+1 i+1 i+1
i = 3; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 5 0 30
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[3] <= V[4]
0 <= 30
V
aux = V[i]
aux = V[3]
aux = 0
V[i] = V[i+1]
V[3] = V[4]
V[3] = 30
V[i+1] = aux;
V[4] = aux;
V[4] = 0
Estado do vetor após a troca:
0 1 2 3 4
200 10 5 30 0
i i+1 i+1 i+1 i+1
i = 4; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 5 30 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[4] <= V[5]
30 <= ?
F
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 10 de 18
Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma
crescente. Portanto, a execução do While continua.
2.ª Passagem no While
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 5 30 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[0] <= V[1]
200 <= 10
F
i = 1; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 5 30 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[1] <= V[2]
10 <= 5
F
i = 2; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 5 30 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[2] <= V[3]
5 <= 30
V
aux = V[i]
aux = V[2]
aux = 5
V[i] = V[i+1]
V[2] = V[3]
V[2] = 30
V[i+1] = aux;
V[3] = aux;
V[3] = 5
Estado do vetor após a troca:
0 1 2 3 4
200 10 30 5 0
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 11 de 18
i = 3; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 30 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[3] <= V[4]
5 <= 0
F
i = 4; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 30 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[4] <= V[5]
0 <= ?
F
Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma
crescente. Portanto, a execução do While continua.
3.ª Passagem no While
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 10 30 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[0] <= V[1]
200 <= 10
F
i = 1; troca = 1;
Estado do vetor e posições a serem comparadas:
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 12 de 18
0 1 2 3 4
200 10 30 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[1] <= V[2]
10 <= 30
V
aux = V[i]
aux = V[1]
aux = 10
V[i] = V[i+1]
V[1] = V[2]
V[1] = 30
V[i+1] = aux;
V[2] = aux;
V[2] = 10
Estado do vetor após a troca:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
i = 2; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[2] <= V[3]
10 <= 5
F
i = 3; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 1
V[i] <= V[i+1]
V[3] <= V[4]
5 <= 0
F
i = 4; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 13 de 18
Verifica Troca = 1
V[i] <= V[i+1]
V[4] <= V[5]
0 <= ?
F
Chegamos ao fim do Vetor com o FOR, entretanto, apesar do vetor já estar ordenado de
forma crescente, é preciso ainda que o WHILE passe mais uma vez pois TROCA ainda vale 1.
A confirmação de que o vetor está ordenado será dado TROCA for setado como zero. Como o
vetor está ordenado, então, o FOR correrá todas as posições, mas não entrará no IF, que é o
onde TROCA é setada como 1.
4.ª Passagem no While
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[0] <= V[1]
200 <= 30
F
i = 1; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[1] <= V[2]
30 <= 10
F
i = 2; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 14 de 18
Verifica Troca = 0
V[i] <= V[i+1]
V[2] <= V[3]
10 <= 5
F
i = 3; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[3] <= V[4]
5 <= 0
F
i = 4; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[4] <= V[5]
0 <= ?
F
O algoritmo terminou sua execução, troca é igual a zero, o vetor está ordenado.
1.2.1. CÓDIGO FONTE
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
void imprimir();
int i, aux, troca, numero[5];
int main()
{
setlocale(LC_ALL, "Portuguese");
printf("n--------------------------------------------");
printf("nEXEMPLO BUBBLE SORT CRESCENTE");
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 15 de 18
printf("n--------------------------------------------");
printf("nInicializando o Array");
for(i=0; i<5; i++)
{
numero[i] = 0;
}
imprimir();
printf("n--------------------------------------------");
printf("nInserindo valores no Arrayn");
for(i=0; i<5; i++)
{
printf("n|Posição %d |Digite um número: t", i);
scanf("%d%*c",&numero[i]);
}
printf("n--------------------------------------------");
printf("nValores armazenados no array");
imprimir();
printf("n--------------------------------------------");
printf("nOrdenando o Array");
troca = 1;
while (troca == 1)
{
troca = 0; for (i = 0; i <= 3; i++)
{
if (numero[i] < numero[i + 1])
{
troca = 1;
aux = numero[i];
numero[i] = numero[i + 1];
numero[i + 1] = aux;
}
}
}
printf("n--------------------------------------------");
printf("nValores ordenados");
imprimir();
printf("n--------------------------------------------");
return 0;
}
void imprimir()
{
printf("n--------------------------------------------");
for (i=0; i<5; i++)
{
printf("n|Posicao: %d | Número: %d|", i, numero[i]);
}
}
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 16 de 18
2. VETOR ORDENADO
2.1 VETOR DECRESCENTE
1.ª Passagem no While:
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[0] <= V[1]
200 <= 30
F
i = 1; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[1] <= V[2]
30 <= 10
F
i = 2; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[2] <= V[3]
10 <= 5
V
i = 3; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 17 de 18
Verifica Troca = 0
V[i] <= V[i+1]
V[3] <= V[4]
5 <= 0
F
i = 4; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
200 30 10 5 0
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[4] >= V[5]
0 >= ?
F
Não há valores que devem ser trocados entre as posições. Portanto, o while será
executado uma única vez, e o IF que está dentro do FOR nunca será executado.
2.1 VETOR CRESCENTE
1.ª Passagem no While:
i = 0; troca = 1;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[0] >= V[1]
0 >= 5
F
i = 1; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort
(2017) Página 18 de 18
Verifica Troca = 0
V[i] >= V[i+1]
V[1] >= V[2]
5 >= 10
F
i = 2; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[2] <= V[3]
10 <= 30
V
i = 3; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] <= V[i+1]
V[3] <= V[4]
30 <= 200
F
i = 4; troca = 0;
Estado do vetor e posições a serem comparadas:
0 1 2 3 4
0 5 10 30 200
i i+1 i+1 i+1 i+1
Verifica Troca = 0
V[i] >= V[i+1]
V[4] >= V[5]
200 >= ?
F
Não há valores que devem ser trocados entre as posições. Portanto, o while será
executado uma única vez, e o IF que está dentro do FOR nunca será executado.

Mais conteúdo relacionado

PDF
Selection Sort
PDF
Insertion Sort
PDF
Exercícios resolvidos de MIPS Portal Embarcados
PDF
Exercicio Resolvido de Busca Binária com Codigo e Imagens
PDF
A influência da Tecnologia em cada faixa etaria
PPTX
Inteligência Artificial Aplicada à Medicina
PPTX
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
PPTX
Apresentação da minha tese de doutorado no EPPC
Selection Sort
Insertion Sort
Exercícios resolvidos de MIPS Portal Embarcados
Exercicio Resolvido de Busca Binária com Codigo e Imagens
A influência da Tecnologia em cada faixa etaria
Inteligência Artificial Aplicada à Medicina
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Apresentação da minha tese de doutorado no EPPC

Mais de Elaine Cecília Gatto (20)

PDF
entrevista r7.pdf
PPTX
Como a pesquisa científica impacta o mundo real.pptx
PDF
Empoderamento Feminino
PPTX
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
PPTX
Community Detection for Multi-Label Classification - Seminários UFSCar
PPTX
Classificação Multirrótulo: Aprendizado de Correlações
PDF
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
PPTX
Community Detection Method for Multi-Label Classification
PDF
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
PDF
Curtinhas de sábado.pdf
PDF
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
PDF
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
PDF
Pipeline desdobramento escalonamento
PDF
Cheat sheet Mips 32 bits
PDF
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
PDF
Como descobrir e classificar coisas usando machine learning sem compilcação
PDF
Exploring label correlations for partitioning the label space in multi label ...
PDF
Número de Bell
PDF
Coeficiente da Silhueta
PDF
Exercicios Resolvidos Série MIPS Embarcados
entrevista r7.pdf
Como a pesquisa científica impacta o mundo real.pptx
Empoderamento Feminino
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Community Detection for Multi-Label Classification - Seminários UFSCar
Classificação Multirrótulo: Aprendizado de Correlações
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Community Detection Method for Multi-Label Classification
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Curtinhas de sábado.pdf
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Pipeline desdobramento escalonamento
Cheat sheet Mips 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Como descobrir e classificar coisas usando machine learning sem compilcação
Exploring label correlations for partitioning the label space in multi label ...
Número de Bell
Coeficiente da Silhueta
Exercicios Resolvidos Série MIPS Embarcados
Anúncio

Último (20)

PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PDF
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
PDF
RELATÓRIO DE ESTÁGIO SURVISIONADO: NEUROPSICOPEDAGOGIA INSTITUCIONAL, CLÍNIC...
PPTX
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
PDF
Um dia na casa do Mensageiro (que a paz e benção de Deus estejam com ele)
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPT
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
PPT
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
PPTX
norma regulamentadora numero vinte nr 20
PDF
edital-de-chamamento-publico-no-3-2025.pdf
PPTX
disciplulado curso preparatorio para novos
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PDF
cadernodoprofessor20142017vol2baixalceducfisicaef6s7a-170409213016.pdf manual...
PDF
Formação politica brasil_2017.pptx.pdf
PDF
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
PDF
Extintores e Acessórios por Francisco Borges.pdf
DOCX
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
PDF
DOENÇAS SEXUALMENTE TRANSMISSIVEIS E SUAS POLARIDADES
NR11 - Treinamento Direcao Defensiva - 2023.pptx
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
RELATÓRIO DE ESTÁGIO SURVISIONADO: NEUROPSICOPEDAGOGIA INSTITUCIONAL, CLÍNIC...
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
Um dia na casa do Mensageiro (que a paz e benção de Deus estejam com ele)
GUERRAFRIA.pptdddddddddddddddddddddddddx
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
norma regulamentadora numero vinte nr 20
edital-de-chamamento-publico-no-3-2025.pdf
disciplulado curso preparatorio para novos
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
cadernodoprofessor20142017vol2baixalceducfisicaef6s7a-170409213016.pdf manual...
Formação politica brasil_2017.pptx.pdf
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
Extintores e Acessórios por Francisco Borges.pdf
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
DOENÇAS SEXUALMENTE TRANSMISSIVEIS E SUAS POLARIDADES
Anúncio

Bubble Sort

  • 1. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 1 de 18 BUBBLE SORT Bubble Sort é um algoritmo de ordenação que pode ser aplicado em Arrays e Listas dinâmicas. Se o objetivo é ordenar os valores em forma decrescente, então, a posição atual é comparada com a próxima posição e, se a posição atual for maior que a posição posterior, é realizada a troca dos valores nessa posição. Caso contrário, não é realizada a troca, apenas passa-se para o próximo par de comparações. Se o objetivo é ordenar os valores em forma crescente, então, a posição atual é comparada com a próxima posição e, se a posição atual for menor que a posição posterior, é realizada a troca. Caso contrário, a troca não é feita e passa-se para o próximo par de comparação. Um array ou lista pode estar já ordenado no momento em que se solicita a ordenação, dessa forma, esta situação tem de ser considerada na implementação do algoritmo. Assim, demonstrarei a representação gráfica e o teste de mesa das duas situações usando array. 1. VETOR DESORDENADO Suponha o seguinte vetor chamado V: Índice 0 1 2 3 4 elemento 200 10 0 5 30 posição i i+1 i+2 i+3 i+4 Vamos utilizá-lo para analisar e testar o comportamento deste algoritmo. Apenas reforçando que em Linguagem C o vetor começa na posição 0. Utilizamos o comando de controle FOR para manipular vetores, então, aqui implementaremos um for que irá da posição 0 até a posição 4 e será incrementado de 1, iniciando em zero. Dessa forma conseguimos obter o valor dos elementos das posições que serão comparadas usando o comando de controle IF e, conforme a ordem desejada fazer a troca se for necessária. Para que não ocorra repetição desnecessária, utilizaremos uma FLAG, que nos avisará quando o vetor estará ordenado e, assim, a execução será terminada. Essa FLAG sempre será setada com 1 quando houver uma troca. Dessa forma, enquanto n for menor ou igual ao tamanho do vetor e, ao mesmo tempo a FLAG for igual a 1, então, deve-se continuar ordenando, caso contrário, o vetor estará ordenado.
  • 2. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 2 de 18 1.1. ORDENANDO DE FORMA CRESCENTE 1.ª Passagem no While: i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 0 5 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[0] >= V[1] 200 >= 10 V aux = V[i] aux = V[0] aux = 200 V[i] = V[i+1] V[0] = V[1] V[0] = 10 V[i+1] = aux; V[1] = aux; V[1] = 200 Estado do vetor após a troca: 0 1 2 3 4 10 200 0 5 30 i i+1 i+1 i+1 i+1 i = 1; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 10 200 0 5 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[1] >= V[2] 200 >= 0 V aux = V[i] aux = V[1] aux = 200 V[i] = V[i+1] V[1] = V[2] V[1] = 0 V[i+1] = aux; V[2] = aux; V[2] = 200 Estado do vetor após a troca: 0 1 2 3 4 10 0 200 5 30 i i+1 i+1 i+1 i+1 i = 2; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 10 0 200 5 30 i i+1 i+1 i+1 i+1
  • 3. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 3 de 18 Verifica Troca = 1 V[i] >= V[i+1] V[2] >= V[3] 200 >= 5 V aux = V[i] aux = V[2] aux = 200 V[i] = V[i+1] V[2] = V[3] V[2] = 5 V[i+1] = aux; V[3] = aux; V[3] = 200 Estado do vetor após a troca: 0 1 2 3 4 10 0 5 200 30 i i+1 i+1 i+1 i+1 i = 3; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 10 0 5 200 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[3] >= V[4] 200 >= 30 V aux = V[i] aux = V[3] aux = 200 V[i] = V[i+1] V[3] = V[4] V[3] = 30 V[i+1] = aux; V[4] = aux; V[4] = 200 Estado do vetor após a troca: 0 1 2 3 4 10 0 5 30 200 i i+1 i+1 i+1 i+1 i = 4; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 10 0 5 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[4] >= V[5] 200 >= ? F Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma crescente. Portanto, a execução do While continua. 2.ª Passagem no While i = 0; troca = 1;
  • 4. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 4 de 18 Estado do vetor e posições a serem comparadas: 0 1 2 3 4 10 0 5 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[0] >= V[1] 10 >= 0 V aux = V[i] aux = V[0] aux = 10 V[i] = V[i+1] V[0] = V[1] V[0] = 10 V[i+1] = aux; V[1] = aux; V[1] = 10 Estado do vetor após a troca: 0 1 2 3 4 0 10 5 30 200 i i+1 i+1 i+1 i+1 i = 1; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 10 5 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[1] >= V[2] 10 >= 5 V aux = V[i] aux = V[1] aux = 10 V[i] = V[i+1] V[1] = V[2] V[1] = 5 V[i+1] = aux; V[2] = aux; V[2] = 10 Estado do vetor após a troca: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 i = 2; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[2] >= V[3] 10 >= 30 F
  • 5. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 5 de 18 i = 3; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[3] >= V[4] 30 >= 200 F i = 4; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] >= V[i+1] V[4] >= V[5] 200 >= ? F Chegamos ao fim do Vetor com o FOR, entretanto, apesar do vetor já estar ordenado de forma crescente, é preciso ainda que o WHILE passe mais uma vez pois TROCA ainda vale 1. A confirmação de que o vetor está ordenado será dado TROCA for setado como zero. Como o vetor está ordenado, então, o FOR correrá todas as posições, mas não entrará no IF, que é o onde TROCA é setada como 1. 3.ª Passagem no While i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[0] >= V[1] 0 >= 5 F
  • 6. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 6 de 18 i = 1; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[1] >= V[2] 5 >= 10 F i = 2; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[2] >= V[3] 10 >= 30 F i = 3; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[3] >= V[4] 30 >= 200 F i = 4; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[4] >= V[5] 200 >= ? F
  • 7. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 7 de 18 O algoritmo terminou de executar, troca é igual a 0, portanto o vetor está ordenado. 1.1.1. CÓDIGO FONTE #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> void imprimir(); int i, aux, troca, numero[5]; int main() { setlocale(LC_ALL, "Portuguese"); printf("n--------------------------------------------"); printf("nEXEMPLO BUBBLE SORT CRESCENTE"); printf("n--------------------------------------------"); printf("nInicializando o Array"); for(i=0; i<5; i++) { numero[i] = 0; } imprimir(); printf("n--------------------------------------------"); printf("nInserindo valores no Arrayn"); for(i=0; i<5; i++) { printf("n|Posição %d |Digite um número: t", i); scanf("%d%*c",&numero[i]); } printf("n--------------------------------------------"); printf("nValores armazenados no array"); imprimir(); printf("n--------------------------------------------"); printf("nOrdenando o Array"); troca = 1; while (troca == 1) { troca = 0; for (i = 0; i <= 3; i++) { if (numero[i] > numero[i + 1]) { troca = 1; aux = numero[i]; numero[i] = numero[i + 1]; numero[i + 1] = aux; }
  • 8. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 8 de 18 } } printf("n--------------------------------------------"); printf("nValores ordenados"); imprimir(); printf("n--------------------------------------------"); return 0; } void imprimir() { printf("n--------------------------------------------"); for (i=0; i<5; i++) { printf("n|Posicao: %d | Número: %d|", i, numero[i]); } } 1.2. ORDENANDO DE FORMA DECRESCENTE 1.ª Passagem no While i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 0 5 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[0] <= V[1] 200 <= 10 F i = 1; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 0 5 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[1] <= V[2] 10 <= 0 F
  • 9. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 9 de 18 i = 2; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 0 5 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[2] <= V[3] 0 <= 5 V aux = V[i] aux = V[2] aux = 0 V[i] = V[i+1] V[2] = V[3] V[2] = 5 V[i+1] = aux; V[3] = aux; V[3] = 0 Estado do vetor após a troca: 0 1 2 3 4 200 10 5 0 30 i i+1 i+1 i+1 i+1 i = 3; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 5 0 30 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[3] <= V[4] 0 <= 30 V aux = V[i] aux = V[3] aux = 0 V[i] = V[i+1] V[3] = V[4] V[3] = 30 V[i+1] = aux; V[4] = aux; V[4] = 0 Estado do vetor após a troca: 0 1 2 3 4 200 10 5 30 0 i i+1 i+1 i+1 i+1 i = 4; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 5 30 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[4] <= V[5] 30 <= ? F
  • 10. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 10 de 18 Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma crescente. Portanto, a execução do While continua. 2.ª Passagem no While i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 5 30 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[0] <= V[1] 200 <= 10 F i = 1; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 5 30 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[1] <= V[2] 10 <= 5 F i = 2; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 5 30 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[2] <= V[3] 5 <= 30 V aux = V[i] aux = V[2] aux = 5 V[i] = V[i+1] V[2] = V[3] V[2] = 30 V[i+1] = aux; V[3] = aux; V[3] = 5 Estado do vetor após a troca: 0 1 2 3 4 200 10 30 5 0 i i+1 i+1 i+1 i+1
  • 11. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 11 de 18 i = 3; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 30 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[3] <= V[4] 5 <= 0 F i = 4; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 30 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[4] <= V[5] 0 <= ? F Chegamos ao fim do Vetor com o FOR, entretanto, ele ainda NÃO está ordenado de forma crescente. Portanto, a execução do While continua. 3.ª Passagem no While i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 10 30 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[0] <= V[1] 200 <= 10 F i = 1; troca = 1; Estado do vetor e posições a serem comparadas:
  • 12. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 12 de 18 0 1 2 3 4 200 10 30 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[1] <= V[2] 10 <= 30 V aux = V[i] aux = V[1] aux = 10 V[i] = V[i+1] V[1] = V[2] V[1] = 30 V[i+1] = aux; V[2] = aux; V[2] = 10 Estado do vetor após a troca: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 i = 2; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[2] <= V[3] 10 <= 5 F i = 3; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 1 V[i] <= V[i+1] V[3] <= V[4] 5 <= 0 F i = 4; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1
  • 13. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 13 de 18 Verifica Troca = 1 V[i] <= V[i+1] V[4] <= V[5] 0 <= ? F Chegamos ao fim do Vetor com o FOR, entretanto, apesar do vetor já estar ordenado de forma crescente, é preciso ainda que o WHILE passe mais uma vez pois TROCA ainda vale 1. A confirmação de que o vetor está ordenado será dado TROCA for setado como zero. Como o vetor está ordenado, então, o FOR correrá todas as posições, mas não entrará no IF, que é o onde TROCA é setada como 1. 4.ª Passagem no While i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[0] <= V[1] 200 <= 30 F i = 1; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[1] <= V[2] 30 <= 10 F i = 2; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1
  • 14. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 14 de 18 Verifica Troca = 0 V[i] <= V[i+1] V[2] <= V[3] 10 <= 5 F i = 3; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[3] <= V[4] 5 <= 0 F i = 4; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[4] <= V[5] 0 <= ? F O algoritmo terminou sua execução, troca é igual a zero, o vetor está ordenado. 1.2.1. CÓDIGO FONTE #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> void imprimir(); int i, aux, troca, numero[5]; int main() { setlocale(LC_ALL, "Portuguese"); printf("n--------------------------------------------"); printf("nEXEMPLO BUBBLE SORT CRESCENTE");
  • 15. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 15 de 18 printf("n--------------------------------------------"); printf("nInicializando o Array"); for(i=0; i<5; i++) { numero[i] = 0; } imprimir(); printf("n--------------------------------------------"); printf("nInserindo valores no Arrayn"); for(i=0; i<5; i++) { printf("n|Posição %d |Digite um número: t", i); scanf("%d%*c",&numero[i]); } printf("n--------------------------------------------"); printf("nValores armazenados no array"); imprimir(); printf("n--------------------------------------------"); printf("nOrdenando o Array"); troca = 1; while (troca == 1) { troca = 0; for (i = 0; i <= 3; i++) { if (numero[i] < numero[i + 1]) { troca = 1; aux = numero[i]; numero[i] = numero[i + 1]; numero[i + 1] = aux; } } } printf("n--------------------------------------------"); printf("nValores ordenados"); imprimir(); printf("n--------------------------------------------"); return 0; } void imprimir() { printf("n--------------------------------------------"); for (i=0; i<5; i++) { printf("n|Posicao: %d | Número: %d|", i, numero[i]); } }
  • 16. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 16 de 18 2. VETOR ORDENADO 2.1 VETOR DECRESCENTE 1.ª Passagem no While: i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[0] <= V[1] 200 <= 30 F i = 1; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[1] <= V[2] 30 <= 10 F i = 2; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[2] <= V[3] 10 <= 5 V i = 3; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1
  • 17. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 17 de 18 Verifica Troca = 0 V[i] <= V[i+1] V[3] <= V[4] 5 <= 0 F i = 4; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 200 30 10 5 0 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[4] >= V[5] 0 >= ? F Não há valores que devem ser trocados entre as posições. Portanto, o while será executado uma única vez, e o IF que está dentro do FOR nunca será executado. 2.1 VETOR CRESCENTE 1.ª Passagem no While: i = 0; troca = 1; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[0] >= V[1] 0 >= 5 F i = 1; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1
  • 18. Prof.ª M.ª Elaine Cecília Gatto (Cissa) Algoritmos de Ordenação: Bublble Sort (2017) Página 18 de 18 Verifica Troca = 0 V[i] >= V[i+1] V[1] >= V[2] 5 >= 10 F i = 2; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[2] <= V[3] 10 <= 30 V i = 3; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] <= V[i+1] V[3] <= V[4] 30 <= 200 F i = 4; troca = 0; Estado do vetor e posições a serem comparadas: 0 1 2 3 4 0 5 10 30 200 i i+1 i+1 i+1 i+1 Verifica Troca = 0 V[i] >= V[i+1] V[4] >= V[5] 200 >= ? F Não há valores que devem ser trocados entre as posições. Portanto, o while será executado uma única vez, e o IF que está dentro do FOR nunca será executado.