Buscar

Método da Bolha - Lógica - Pseudo e Código

Prévia do material em texto

Estruturas de Dados CCT0021 – Método da Bolha Página 1 de 12 
Pseudocódigo e Codificação em C++ 
Método da Bolha (classificação de vetor) 
 
Lógica e pseudocódigo da classificação de um vetor (ou matriz de uma 
dimensão) de, por exemplo, seis elementos, utilizando o método da bolha. 
 
 
 
 
A idéia é comparar os elementos dois a dois e ir “jogando” os elementos mais 
altos para as últimas posições do vetor até obter o vetor classificado. 
 
 
 
Uma vez que o elemento mais alto tenha atingido a mais alta posição, o 
tamanho do vetor, a ser classificado é reduzido, de uma unidade até que o 
tamanho seja maior ou igual a dois. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5 4 3 2 6 155 44 33 22 66 11
 
1 2 3 4 5 611 22 33 44 55 66
 
Estruturas de Dados CCT0021 – Método da Bolha Página 2 de 12 
Pseudocódigo e Codificação em C++ 
 
 
 
Primeiro passo 
 
 
 
 
5 4 3 2 6 1
4 5 3 2 6 1
4 3 5 2 6 1
4 3 2 5 6 1
4 3 2 5 6 1
4 3 2 5 1 6
5 4 3 2 6 155 44 33 22 66 11
4 5 3 2 6 144 55 33 22 66 11
4 3 5 2 6 144 33 55 22 66 11
4 3 2 5 6 144 33 22 55 66 11
4 3 2 5 6 144 33 22 55 66 11
4 3 2 5 1 644 33 22 55 11 66
 
Estruturas de Dados CCT0021 – Método da Bolha Página 3 de 12 
Pseudocódigo e Codificação em C++ 
 
Observe que o elemento 6 já se encontra na última posição do vetor. Assim, 
vamos reduzir de uma unidade o tamanho, que passa a ser 5, que ainda é 
maior ou igual a 2. A nova configuração, levando-se em conta as comparações 
do passo anterior, é a seguinte: 
 
 
 
Observe que o elemento 5 já se encontra na última posição do novo tamanho 
do vetor. Assim, vamos reduzir de uma unidade o tamanho, que passa a ser 4, 
4 3 2 5 1
3 4 2 5 1
3 2 4 5 1
3 2 4 5 1
3 2 4 1 5
4 3 2 5 144 33 22 55 11
3 4 2 5 133 44 22 55 11
3 2 4 5 133 22 44 55 11
3 2 4 5 133 22 44 55 11
3 2 4 1 533 22 44 11 55
 
Estruturas de Dados CCT0021 – Método da Bolha Página 4 de 12 
Pseudocódigo e Codificação em C++ 
que ainda é maior ou igual a 2. A nova configuração, levando-se em conta as 
comparações do passo anterior, é a seguinte: 
 
 
 
Observe que o elemento 4 já se encontra na última posição do novo tamanho 
do vetor. Assim, vamos reduzir de uma unidade o tamanho, que passa a ser 3, 
3 2 14
3 2 14
3 2 14
3 2 41
3 2 1433 22 1144
3 2 1433 22 1144
3 2 1433 22 1144
3 2 4133 22 4411
 
 
Estruturas de Dados CCT0021 – Método da Bolha Página 5 de 12 
Pseudocódigo e Codificação em C++ 
que ainda é maior ou igual a 2. A nova configuração, levando-se em conta as 
comparações do passo anterior, é a seguinte: 
 
 
 
Observe que o elemento 3 já se encontra na última posição do novo tamanho 
do vetor. Assim, vamos reduzir de uma unidade o tamanho, que passa a ser 2, 
que agora é igual a 2. A nova configuração, levando-se em conta as 
comparações do passo anterior, é a seguinte: 
 
 
3 2 1
2 3 1
2 1 3
3 2 133 22 11
2 3 122 33 11
2 1 322 11 33
 
Estruturas de Dados CCT0021 – Método da Bolha Página 6 de 12 
Pseudocódigo e Codificação em C++ 
 
 
Observe que o elemento 2 já se encontra na última posição do novo tamanho 
do vetor. Assim, vamos reduzir de uma unidade o tamanho, que passa a ser 1, 
que agora é menor que 2. Portanto, não se justifica fazer mais comparações, 
porque o menor elemento 1, já se encontra na primeira posição. 
 
 
 
 
 
 
 
 
 
2 1
1 2
2 122 11
1 211 22
 
Estruturas de Dados CCT0021 – Método da Bolha Página 7 de 12 
Pseudocódigo e Codificação em C++ 
Pseudocódigo do método da bolha 
 
 
INICIO 
 
 inteiro vet[6]; 
 
 inteiro aux, //auxiliar para troca de elementos 
 bolha, //indicador de mais alto elemento fora de ordem 
 lsup, //indicador do tamanho do vetor a ser pesquisado, sendo 
 //o valor inicial igual a 6 
 i; //indicador (posição) do elemento do vetor 
 
 carregar vet 
 
 lsup � 6; 
 
 enquanto lsup > 1 faça 
 
 bolha � 0; 
 
 para i de 0 até lsup – 1 faça //considera posição iniciado com 0 
 
 se vet [ i ] > vet [ i + 1 ] 
 
 então //troca elemento com i + 1 
 
 aux � vet [ i ]; 
 vet [ i ] � vet [ i + 1 ]; 
 vet [ i + 1 ] � aux; 
 bolha �i; 
 fim se 
 fim para 
 
 lsup � bolha; //aponta para a última posição de troca 
 
 fim enquanto 
 
 mostrar vet; 
 
FIM 
 
 
 
 
 
 
 
 
 
Estruturas de Dados CCT0021 – Método da Bolha Página 8 de 12 
Pseudocódigo e Codificação em C++ 
Codificação do Pseudocódigo do método da bolha em C++: 
 
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
const int TAMANHO = 6; 
int main(int argc, char *argv[]) 
{ 
 int vet[] = {5, 2, 1, 3, 4, 6}; 
 int aux, lsup, bolha; 
 
 lsup = 6; 
 while ( lsup > 0 ) 
 { 
 bolha = 0; 
 for (int i = 0; i < lsup - 1 ; i++) 
 { 
 if(vet[i] > vet[i + 1]) 
 { 
 aux = vet[i]; 
 vet[i] = vet[i + 1]; 
 vet[i + 1] = aux; 
 bolha = i + 1; 
 } 
 } 
 lsup = bolha; 
 } 
 for (int i = 0; i < TAMANHO; i++) 
 printf("\n%d",vet[i]); 
 
 cout << '\n' << endl; 
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Estruturas de Dados CCT0021 – Método da Bolha Página 9 de 12 
Pseudocódigo e Codificação em C++ 
PESQUISA BINÁRIA 
 
 
Dado um vetor X de Y elementos, por exemplo, verificar se existe um elemento 
igual a K (chave de pesquisa) no vetor. Se existir, imprimir a chave e posição 
onde foi encontrada a chave; se não, imprimir: “chave k não encontrada”. O 
vetor X tem que estar ordenado e a chave K tem que ser lida. 
 
Neste método, para pesquisar um elemento será utilizada a pesquisa binária, 
desde que o vetor já esteja ordenado. Nesta pesquisa procuramos o elemento 
K dividindo o vetor em duas partes (por isso bi, de duas partes) e testando em 
qual das duas a chave deveria estar. Procedendo da mesma forma para a 
parte provável, e assim sucessivamente: 
 
 
Neste exemplo, pode-se visualizar que o vetor tem 11 elementos. Para saber 
posição meio do vetor, fez-se a divisão do tamanho(11) por 2. Então compara-
se o vetor[ meio ] com a chave, para saber em que parte a chave deve estar. 
Procede-se da mesma forma para as outras partes, até encontra ou não a 
chave. 
 
K
X
K
K
K
X
KK
K
 
Estruturas de Dados CCT0021 – Método da Bolha Página 10 de 12 
Pseudocódigo e Codificação em C++ 
 
 
 
Pseudocódigo da pesquisa binária 
 
INICIO 
 
 inteiro vet[11];//pelo exemplo, uma vez que tem que ser maior que 3 
 
 inteiro comeco, //indicador do primeiro elemento da parte do vetor 
 //a considerar. 
 fim, //indicador do último elemento da parte do vetor 
 //a considerar. 
 meio, //indicador elemento do meio da parte do vetor considerada 
 k; //elemento procurado 
 
 carregar vet 
 
 ler k; 
 
 começo � 0; //considere a primeira posição começando com zero 
 fim � 10; //última posiçãodo vetor 
 
 repita 
 
 meio � (comeco + fim)/2; 
 
 se k < vet [ meio ] 
 
 então 
 fim � meio – 1; 
 
 senão comeco � meio + 1; 
 
 fim se 
 
 até ((vet [ meio ] = k) ou (comeco > fim)) 
 
 se vet [ meio ] != k 
 então imprima (“NÃO EXISTE O ELEMENTO”); 
 senão imprima (“A CHAVE “, k, “ ESTÁ NA POSIÇÃO: “, meio) ; 
 
 fim se; 
 
FIM 
 
 
Estruturas de Dados CCT0021 – Método da Bolha Página 11 de 12 
Pseudocódigo e Codificação em C++ 
Exercício: Considere o segmento de programa a seguir: 
 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 
{ 
 int vetor[ ] = {1,2,3,4,5,6,7}; 
 
 system("PAUSE"); 
 return 0; 
} 
 
 Como se percebe no segmento de programa acima, o mesmo está 
incompleto e possui um array já iniciado e ordenado em ordem crescente. 
Complete-o (1) para pesquisar se existe um certo elemento igual a k (chave) 
no array e (2) para imprimir uma das mensagens: “A chave de pesquisa 
k esta na posição x do vetor.” (a posição x onde foi encontrada a 
chave é a mesma que o elemento ocupa no array) ou, então, “Não existe 
o elemento K no vetor.”. A chave deve ser lida de maneira interativa. 
 
 É obrigatório utilizar o método da pesquisa binária, visto em sala de aula, 
para a pesquisa solicitada. 
 
Exemplo de um lay-out de entrada e saída 
 
Entre com o valor(inteiro) da chave a ser pesquisada no vetor: 3 
 
A chave de pesquisa 3 esta na posicao 2 do vetor. 
 
Pressione qualquer tecla para continuar. . . 
 
 
Entre com o valor(inteiro) da chave a ser pesquisada no vetor: 9 
 
Nao existe o elemento 9 no vetor. 
 
Pressione qualquer tecla para continuar. . . 
 
 
#include <stdio.h> 
#include <cstdlib> 
#include <iostream> 
#include <ctype.h> 
#include <conio.h> 
 
using namespace std; 
 
int main(int argc, char *argv[]) 
{ 
 
 int vet[] = {1,2,3,4,5,6,7}; 
 int chave; 
 
 int inicio, meio, fim; 
 
Estruturas de Dados CCT0021 – Método da Bolha Página 12 de 12 
Pseudocódigo e Codificação em C++ 
 inicio = 1; 
 fim = 7; 
 
 cout << "\nEntre com o valor(inteiro) da chave a ser pesquisada no 
vetor: "; 
 cin >> chave; 
 
 do 
 { 
 meio = (inicio + fim)/2; 
 if (chave < vet[meio]) 
 fim = meio - 1; 
 else inicio = meio + 1; 
 }while((vet[meio] != chave) &&(inicio <= fim)); 
 
 if (vet[meio] != chave) 
 cout << "\nNao existe o elemento " << chave << " no vetor." << 
"\n\n"; 
 else 
 cout << "\nA chave de pesquisa " << chave << " esta na posicao " 
 << meio << " do vetor." << "\n\n"; 
 
 system("PAUSE"); 
 return 0; 
} 
 
 
Entre com o valor(inteiro) da chave a ser pesquisada no vetor: 3 
 
A chave de pesquisa 3 esta na posicao 2 do vetor. 
 
Pressione qualquer tecla para continuar. . . 
 
 
 
Entre com o valor(inteiro) da chave a ser pesquisada no vetor: 9 
 
Nao existe o elemento 9 no vetor. 
 
Pressione qualquer tecla para continuar. . .

Continue navegando

Outros materiais