Aula 4 - Bubble Sort - Resolvido
-
Upload
eurico-namaste -
Category
Documents
-
view
17 -
download
0
description
Transcript of Aula 4 - Bubble Sort - Resolvido
ORDENAÇÃO POR TROCA
Bubble Sort
Este tipo de ordenação é o mais conhecido atualmente. Ele ordena o vetor fazendo comparações entre os elementos do vetor. Utiliza um laço for (externo) que corre o vetor inteiro, e o laço for (interno) para fazer a comparação e, se necessário a troca entre os elementos.
Veja a função contendo o algoritmo de ordenação abaixo:
#include <stdio.h>#include <stdlib.h>#define TAM 10
int bubble_Sort ( int V[TAM]) { int a, b, t;
for ( a = 1; a < TAM; a++ ) { for (b = TAM-1; b >= a ; b-- ) { if ( V[b-1] > V[b] ) { t = V[b-1] ; V[b-1] = V[b] ; V[b] = t ; } } } }
int main(){int vetor[TAM] = { 2 , 5 , 1 , 9 , 6 , 8 , 3 , 4 , 7 , 10 };
int i, t; for( i = 0 ; i < TAM ; i++ ) printf("vetor[%d] = %d\n",i,vetor[i]); // mostra o vetor antes das trocas t = bubble_Sort (vetor); printf("numero de trocas:%d\n", t); for( i= 0; i < TAM ; i++ ) printf("vetor[%d] = %d\n",i,vetor[i]); // mostra o vetor depois das trocas
}
Agora olhe como é feita a troca dentro do vetor:
Posição 0 1 2 3 4 5 6 7 8 9conteúdo 2 5 1 9 6 8 3 4 7 10troca 1 2 5 1 9 6 3 8 4 7 10troca 2 2 5 1 9 3 6 8 4 7 10troca 3 2 5 1 3 9 6 8 4 7 10troca 4 2 1 5 3 9 6 8 4 7 10troca 5 1 2 5 3 9 6 8 4 7 10troca 6 1 2 5 3 9 6 4 8 7 10troca 7 1 2 5 3 9 4 6 8 7 10troca 8 1 2 5 3 4 9 6 8 7 10troca 9 1 2 3 5 4 9 6 8 7 10troca 10 1 2 3 5 4 9 6 7 8 10troca 11 1 2 3 5 4 6 9 7 8 10troca 12 1 2 3 4 5 6 9 7 8 10troca 13 1 2 3 4 5 6 7 9 8 10troca 14 1 2 3 4 5 6 7 8 9 10conteúdo 1 2 3 4 5 6 7 8 9 10
Se limparmos a tabela e só mostrarmos os numeros que foram trocados veremos o seguinte:
Posição 0 1 2 3 4 5 6 7 8 9conteúdo 2 5 1 9 6 8 3 4 7 10
troca 1 3 8 troca 2 3 6 troca 3 3 9 troca 4 1 5 troca 5 1 2 troca 6 4 8 troca 7 4 6 troca 8 4 9 troca 9 3 5
troca 10 7 8 troca 11 6 9 troca 12 4 5 troca 13 7 9 troca 14 8 9
conteúdo 1 2 3 4 5 6 7 8 9 10
Fazendo o mesmo exercício só que mudando o conteúdo de inteiros para caracteres, o resultado ficaria desta forma:
Posição 0 1 2 3 4 5 6 7 8 9conteúdo B E A I F H C D G J
troca 1 B E A I F C H D G Jtroca 2 B E A I C F H D G Jtroca 3 B E A C I F H D G Jtroca 4 B A E C I F H D G Jtroca 5 A B E C I F H D G Jtroca 6 A B E C I F D H G Jtroca 7 A B E C I D F H G Jtroca 8 A B E C D I F H G Jtroca 9 A B C E D I F H G J
troca 10 A B C E D I F G H Jtroca 11 A B C E D F I G H Jtroca 12 A B C D E F I G H Jtroca 13 A B C D E F G I H Jtroca 14 A B C D E F G H I J
conteúdo A B C D E F G H I J
E o resultado mostrando apenas as trocas ficaria:
Posição 0 1 2 3 4 5 6 7 8 9conteúdo B E A I F H C D G J
troca 1 C H troca 2 C F troca 3 C I troca 4 A E troca 5 A B troca 6 D H troca 7 D F troca 8 D I troca 9 C E
troca 10 G H troca 11 F I troca 12 D E troca 13 G I troca 14 H I
conteúdo A B C D E F G H I J
Para cada troca de valores este algoritmo efetua 3 trocas dentro do laço for (interno), onde ele:
1° Armazena o conteúdo de uma posição do vetor, por exemplo 1, numa variável temporária
2° Copia o conteúdo da variável 1 na variável 23° Copia o conteúdo da variável temporária na variável 2.
Veja:
t = V[b-1] ; V[b-1] = V[b] ; V[b] = t ;
T é a variável temporária.V[b-1] seria a posição 1.V[b] seria a posição 2.
Desta forma ele evita que algum valor seja perdido.
No Bubble sort o número de comparações é sempre o mesmo pois os dois laços FOR repetem o número especificado de vezes, estando a lista inicialmente ordenada ou não.Já quando falamos de trocas a melhor situação sempre será quando o vetor já estiver ordenado, pois não ocorrerá troca nenhuma. Na pior situação é quando o vetor esta completamente ao contrário pois será necessário efetuar troca em todas as posições, e o número de trocas estará bem próximo do número de comparações.
Exercício:
1) Utilizando a função bubble sort ordene um vetor que possua os seguintes números: { 3 , 12 , 21 , 4 , 8 , 7 , 50 , 1 , 10 , 2 } e mostre quantas trocas foram efetuadas.
2) Utilizando a função bubble sort, ordene o vetor do exercício acima de forma decrescente e apresente o vetor na tela.
3) Utilizando o bubble sort faça o teste de mesa mostrando a ordenação de um vetor de caracteres com o seguinte conteúdo { E, C, G, A, B, I }
Bibliografia utilizada:C Completo e Total – Schildt, Hebert – capítulo 19 – Páginas 504 até 507Algoritmo – Cormen, - Capitulo – Páginas
Exercício 1: #include <stdio.h>#include <stdlib.h>#define TAM 10
int bubble_Sort( int V[TAM]) { int a, b, t, i; int ii=0;
for ( a=1;a<TAM;a++) { for (b=TAM-1;b>=a;b--) { if (V[b-1]> V[b]) { t=V[b-1]; V[b-1]=V[b]; V[b]=t; ii++; } } } printf("\nVetor Ordenado:\n"); for(i=0;i<TAM;i++) printf("vetor[%d] = %d\n",i,V[i]); printf("\ndentro da funcao de ordenacao, total de trocas %d\n\n", ii); return ii;}
int main(){int vetor[TAM] = {3,12,21,4,8,7,50,1,10,2};
int i, t;
printf("Vetor baguncado:\n"); for(i=0;i<TAM;i++) printf("vetor[%d] = %d\n",i,vetor[i]);
t = bubble_Sort (vetor); printf("\nnumero de trocas:%d\n", t); getch();}
#include <stdio.h>#include <stdlib.h>#define TAM 10
int bubble_Sort( int V[TAM]) { int a, b, t, i; int ii=0;
for ( a=1;a<TAM;a++) { for (b=TAM-1;b>=a;b--) { if (V[b-1]< V[b]) { t=V[b-1]; V[b-1]=V[b]; V[b]=t; ii++; } } } printf("\nVetor Ordenado:\n"); for(i=0;i<TAM;i++) printf("vetor[%d] = %d\n",i,V[i]); printf("\ndentro da funcao de ordenacao, total de trocas %d\n\n", ii); return ii;}
int main(){int vetor[TAM] = {3,12,21,4,8,7,50,1,10,2};
int i, t;
printf("Vetor baguncado:\n"); for(i=0;i<TAM;i++) printf("vetor[%d] = %d\n",i,vetor[i]);
t = bubble_Sort (vetor); printf("\nnumero de trocas:%d\n", t); getch();}