Post on 08-Aug-2015
INSTITUTO FEDERAL RIO GRANDE DO SUL Campus Osório
1
Ao final desta Aula: ü Conhecer o método de ordenação bublesort e seleção
direta.
ü Desenvolver os seus respectivos algoritmos
2
Lembre-se
ü Sempre que tiver dúvidas, pergunte.
ü Muita atenção nas explicações;
ü Utilize as referências para estudar em casa.
3
ü Estruturas de seleção
ü Estruturas de repetição
ü Vetores;
ü Algoritmos, em geral
Caso tenha dificuldades na resolução do exercício, revise o seguinte conteúdo:
4
Como ordenamos nossas coisas?
5
Algoritmos de Ordenação
Troca Seleção
Bubble Sort Cocktail Sort Comb Sort Gnome Sort Odd-even Sort Quicksort
Selection Sort
HeapSort
6
Insertion Sort
Shell Sort
Inserção
Ordenação bolha
7
ü Método de ordenação simples;
ü Entendimento e implementação fáceis;
ü É um dos mais conhecidos métodos de ordenação;
ü Não é um algoritmo eficiente;
ü Objetivo é desenvolver o raciocínio.
O Princípio do Bubble sort é a troca entre posições consecutivas, fazendo com que os valores mais altos (ou mais baixos) “borbulhem” para o final do conjunto
Ordenação bolha
8
Considere o conjunto abaixo:
5 3 1 4 2
Como poderíamos ordená-lo?
Ordenação bolha
9
Passo 1: Comparar os dois primeiros valores.
5 3 1 4 2
Estão desordenados entre si?
<
Ordenação bolha
10
Passo 1: Comparar os dois primeiros valores.
3 5 1 4 2
Está ordenado, agora?
<
Ordenação bolha
11
Passo 2: Repetir o procedimento até o final.
3 5 1 4 2
Estão desordenados entre si?
<
Ordenação bolha
12
Passo 2: Repetir o procedimento até o final.
3 1 5 4 2
E agora?
<
Ordenação bolha
13
Passo 2: Repetir o procedimento até o final.
3 1 5 4 2
5 é menor que o 4?
<
Ordenação bolha
14
Passo 2: Repetir o procedimento até o final.
3 1 4 5 2
inverte
<
Ordenação bolha
15
Passo 2: Repetir o procedimento até o final.
3 1 4 5 2
5 é menor que o 2?
<
Ordenação bolha
16
3 1 4 2 5
Agora, 0 5 "borbulhou" até a última posição, que é a correta.
O Próximo passo é repetir o processo desde o início, sem comparar o penúltimo elemento com o último.
Ordenação bolha
17
3 1 4 2 5
Comparar os valores:
3 é menor que 1?
<
Ordenação bolha
18
1 3 4 2 5
3 é menor que 4?
<
Comparar os valores:
Ordenação bolha
19
1 3 4 2 5
4é menor que 2?
<
Comparar os valores:
Ordenação bolha
20
1 3 2 4 5
Agora, o 4 está na posição final. Devemos continuar comparando do início, sem utilizarmos o 4 e o 5.
Ordenação bolha
21
1 3 2 4 5
1 é menor que 3?
Comparando:
<
Ordenação bolha
22
1 3 2 4 5
3 é menor que 2?
Comparando:
<
Ordenação bolha
23
1 2 3 4 5
Basta agora, realizar o mesmo processo do início, ignorando o 3 em diante.
Continuando:
<
Ordenação bolha
24
1 2 3 4 5
Como só temos um último elemento...
2 Está na sua posição final:
Ordenação bolha
25
1 2 3 4 5
A ordenação acabou!
Bolha.c
26
#include <stdio.h> int main(void) {
int vetor[5] = {5, 3, 1, 4, 2};
int tamanho = 5; int aux;
for(int i=tamanho-1; i >= 1; i--) {
for( int j=0; j < i ; j++) {
if(vetor[j] > vetor[j + 1]) { aux = vetor[j];
vetor[j] = vetor[j+1];
vetor[j + 1] = aux;
}
}
} for( int r = 0; r < tamanho; r++){
printf("%d\n",vetor[r]);
}
}
Seleção Direta
27
ü Ao comparar, caso o primeiro elemento esteja
desordenado em relação ao outro, é feita a troca;
ü Ao alcançar o final do conjunto, teremos o menor
valor ou o maior, conforme feita a primeira
comparação.
ü Este algoritmo, embora contenha o mesmo
número de comparações que o bubble sort, o
numero médio de trocas é menor.
O Método de ordenação seleção direta consiste em varrer o conjunto comparando todos os elementos com o primeiro.
Seleção Direta
28
Considere o conjunto abaixo:
5 3 1 4 2
Como poderíamos ordená-lo pela seleção direta?
Seleção Direta
29
Passo 1: Comparar o primeiro com o segundo.
5 3 1 4 2
Estão desordenados entre si?
<
Seleção Direta
30
Passo 2: Comparar o primeiro com os próximos.
3 5 1 4 2
Estão desordenados entre si?
<
Seleção Direta
31
Passo 2: Comparar o primeiro com os próximos.
1 5 3 4 2
Estão desordenados entre si?
<
Seleção Direta
32
Passo 2: Comparar o primeiro com os próximos.
1 5 3 4 2
Estão desordenados entre si?
<
Seleção Direta
33
O menor elemento foi deslocado para sua posição correta!
1 5 3 4 2
O Primeiro eleento não precisa ser mais comparado
Seleção Direta
34
Passo 3: Comparar o os restantes.
1 5 3 4 2
Estão desordenados entre si?
<
Seleção Direta
35
Passo 3: Comparar o os restantes.
1 3 5 4 2
Estão desordenados entre si?
<
Seleção Direta
36
Passo 3: Comparar o os restantes.
1 3 5 4 2
Estão desordenados entre si?
<
Seleção Direta
37
Segundo item completo.
1 2 5 4 3
Assim por diante.
Seleção Direta
38
Continuando as comparações.
1 2 5 4 3
Assim por diante.
<
Seleção Direta
39
Continuando as comparações.
1 2 4 5 3
Assim por diante.
<
Seleção Direta
40
Mais um item em sua posição.
1 2 3 5 4
Assim por diante.
Seleção Direta
41
Continuando.
1 2 3 5 4
Assim por diante.
<
Seleção Direta
42
Mais um item em sua posição.
1 2 3 4 5
Assim por diante.
Seleção Direta
43
Mais um item em sua posição.
1 2 3 4 5
Só sobrou o último item, e já está na posição correta.
Seleção Direta
44
Finalizou a ordenação.
1 2 3 4 5
Selecao.c
45
#include <stdio.h> int main(int argc, const char * argv[]) { int vetor[5] = {5, 3, 1, 4, 2}; int tamanho = 5; int i, j, menor, aux; for(i = 0; i < tamanho -‐ 1; i++) { menor = i; for(j = i + 1; j < tamanho; j++) { if(vetor[j] < vetor[menor]) menor = j; } aux = vetor[i]; vetor[i] = vetor[menor]; vetor[menor] = aux; } for( int r = 0; r < 5; r++){ prinL("%d\n",vetor[r]); } }
ü Crie um algoritmo de ordenação do tipo Bubble Sort que classifique em ordem decrescente, 20 números aleatórios.
ü Faça um estudo comparando os 2 algoritmos estudados e sua velocidade de execução para 10, 100 e 1000 elementos classificados. Anote os resultados de tempo máximo, mínimo e médio obtido a partir de 10 execuções com números aleatórios.
46
47 hPps://www.youtube.com/watch?v=ZZuD6iUe3Pc
Aho, Alfred V., Hopcroft, John F., Ullman, Jeffrey D., Data Structure and Algorithms, Massachusetts: Addison- Wesley, 1987.
Cormen T, Leiserson, Rivest. Introduction to Algorithms. 2nd edition. MIT Press, 2001..
Knuth, D. E. The Art of Computer Programming, Addison-Wesley, 1974.
Soffner R. Algoritmos e programação em Linguagem C. Editora Saraiva, 2013.
Szwarcfiter, J. L. Grafos e Algoritmos Computacionais, Addison-Wesley, 1974.
Referências
48
49