estrutura de ados - caetano.eng.br
TRANSCRIPT
ESTRUTURA DE DADOS
Prof. Dr. Daniel Caetano
2012 - 2
ORDENANDO LISTAS
Objetivos
• Compreender o que são ordenações por seleção e por inserção
• Capacitar para implementar ambos os tipos de ordenação
• GRUPOS? – Até o fim da aula!
Material de Estudo
Material Acesso ao Material
Apresentação http://www.caetano.eng.br/ (Aula 4)
Biblioteca Virtual Estruturas de Dados – -?
RECORDANDO...
Recordando...
• Podemos criar uma lista ordenada
– Inserindo um elemento já em seu lugar
• Podemos ordenar uma lista posteriormente:
– Trocas (bubble sort)
– Seleção
– Inserção
ORDENANDO UMA LISTA POR SELEÇÃO
Ordenação por Seleção
• Lista 1: Lista Desordenada
• Lista 2: Vazia: Construir lista ordenada
• Procedimento
– Buscar menor elemento da Lista 1
– Removê-lo e inseri-lo na 1ª posição da Lista 2
– Buscar menor elemento da Lista 1
– Removê-lo e inseri-lo na 2ª posição da Lista 2
Ordenação por Seleção - Exemplo
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 2 PosMenor: 3 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 0
Ordenação por Seleção - Exemplo
Menor: 4 PosMenor: 0 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 7 PosMenor: 1 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 7 PosMenor: 1 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 7 PosMenor: 1 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 7 PosMenor: 1 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: 7 PosMenor: 1 Inserida: 1
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 2
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 2
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 2
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 2
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 2
Ordenação por Seleção - Exemplo
Menor: 9 PosMenor: 0 Inserida: 2
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 3
Ordenação por Seleção - Exemplo
Menor: ? PosMenor: ? Inserida: 3
Ordenação por Seleção - Exemplo
Menor: 10 PosMenor: 0 Inserida: 3
Ordenação por Seleção - Exemplo
Menor: 10 PosMenor: 0 Inserida: 3
Ordenação por Seleção - Exemplo
Menor: 10 PosMenor: 0 Inserida: 3
Ordenação por Seleção - Exemplo
Menor: 10 PosMenor: 0 Inserida: 3
FIM!
ORDENAÇÃO POR SELEÇÃO OTIMIZADA
Ordenação por Seleção
• Será que precisamos de duas listas?
• Procedimento
– Buscar menor da Lista a partir da pos “0”
– Trocar com o da pos “0”
– Buscar menor da Lista a partir da pos “1”
– Trocar com o da pos “1”
– ...
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 4 PosMenor: 0
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 0 Menor: 2 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 9 PosMenor: 1
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 9 PosMenor: 1
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 4 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 4 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 4 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 4 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 1 Menor: 4 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 2 Menor: 7 PosMenor: 2
Ordenação por Seleção - Exemplo
Inicial: 3 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 3 Menor: 9 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 3 Menor: 9 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 3 Menor: 9 PosMenor: 3
Ordenação por Seleção - Exemplo
Inicial: 4 Menor: ? PosMenor: ?
Ordenação por Seleção - Exemplo
Inicial: 4 Menor: 10 PosMenor: 4
Ordenação por Seleção - Exemplo
Inicial: 4 Menor: 10 PosMenor: 4 FIM!
É mais rápido e gasta menos memória!
Ordenação por Seleção • Implementando...
– Lista com n elementos
• Algoritmo 1. i=0
2. Busca menor a partir de i; anotar a pos. menor
3. Trocar elemento da pos. i com o da pos. menor
4. i = i + 1
5. Volta para o passo 2 se i < n
• Pegue o código base da aula – selecao.cpp
ORDENANDO UMA LISTA POR INSERÇÃO
Ordenação por Seleção
• Lista 1: Lista Desordenada
• Lista 2: Vazia: Construir lista ordenada
• Procedimento
– Pegar 1º elemento da Lista 1
– Inseri-lo em sua correta posição na Lista 2
– Pegar 2º elemento da Lista 1
– Inseri-lo em sua correta posição na Lista 2
– ...
Ordenação por Inserção - Exemplo
Atual: ?
Ordenação por Inserção - Exemplo
Atual: 0
Ordenação por Inserção - Exemplo
Atual: 0
Ordenação por Inserção - Exemplo
Atual: 0
Ordenação por Inserção - Exemplo
Atual: 1
Ordenação por Inserção - Exemplo
Atual: 1
Ordenação por Inserção - Exemplo
Atual: 1
4 < 9?
Ordenação por Inserção - Exemplo
Atual: 1
SIM!
Ordenação por Inserção - Exemplo
Atual: 1
Ordenação por Inserção - Exemplo
Atual: 2
Ordenação por Inserção - Exemplo
Atual: 2
9 < 7?
Ordenação por Inserção - Exemplo
Atual: 2
NÃO
Ordenação por Inserção - Exemplo
Atual: 2
4 < 7?
Ordenação por Inserção - Exemplo
Atual: 2
SIM!
Ordenação por Inserção - Exemplo
Atual: 2
Ordenação por Inserção - Exemplo
Atual: 3
Ordenação por Inserção - Exemplo
Atual: 3
9 < 2?
Ordenação por Inserção - Exemplo
Atual: 3
NÃO!
Ordenação por Inserção - Exemplo
Atual: 3
7 < 2?
Ordenação por Inserção - Exemplo
Atual: 3
NÃO!
Ordenação por Inserção - Exemplo
Atual: 3
4 < 2?
Ordenação por Inserção - Exemplo
Atual: 3
NÃO!
Ordenação por Inserção - Exemplo
Atual: 3
Ordenação por Inserção - Exemplo
Atual: 3
Ordenação por Inserção - Exemplo
Atual: 4
Ordenação por Inserção - Exemplo
Atual: 4
9 < 10?
Ordenação por Inserção - Exemplo
Atual: 4
SIM!
Ordenação por Inserção - Exemplo
Atual: 4
FIM!
ORDENAÇÃO POR INSERÇÃO OTIMIZADA
Ordenação por Inserção
• Será que precisamos de duas listas?
• Procedimento
– Pega elemento da pos “1”
– Trocá-lo um a um com os anteriores até que ele seja maior que seu antecessor imediato
– Pega elemento da pos “2”
– Trocá-lo um a um com os anteriores até que ele seja maior que seu antecessor imediato
– ...
Ordenação por Inserção - Exemplo
Inicial: ? Atual: ?
Ordenação por Inserção - Exemplo
Inicial: 1 Atual: ?
Ordenação por Inserção - Exemplo
Inicial: 1 Atual: 0 9 < 4?
Ordenação por Inserção - Exemplo
Inicial: 1 Atual: 0 NÃO!
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: ?
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 1 7 < 9?
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 1 SIM!
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 1
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 1
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 0
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 0 7 < 4?
Ordenação por Inserção - Exemplo
Inicial: 2 Atual: 0 NÃO!
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: ?
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 2
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 2 2 < 9?
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 2 SIM!
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 2
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 2
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 1
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 1 2 < 7?
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 1 SIM!
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 1
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 1
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0 2 < 4?
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0 SIM!
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0
Ordenação por Inserção - Exemplo
Inicial: 3 Atual: 0
Ordenação por Inserção - Exemplo
Inicial: 4 Atual: ?
Ordenação por Inserção - Exemplo
Inicial: 4 Atual: 3 10 < 9?
Ordenação por Inserção - Exemplo
Inicial: 4 Atual: 3 FIM!
É mais rápido e gasta menos memória!
Ordenação por Seleção • Implementando...
– Lista com n elementos
• Algoritmo 1. i=1
2. j = i – 1
3. Se valor da pos j < valor da pos j+1 • j = j – 1
• Se j >= 0, volta para 3
4. i = i + 1 • Se i <= n, volta para 2
• Pegue o código base da aula – insercao.cpp
EXERCÍCIO DE FIXAÇÃO
Exercício • Em um programa, crie uma lista de elementos
não ordenados com 50 valores pares
• Faça um menu que permita: – 1) Ordenar com Bubble Sort (código na aula passada!)
– 2) Ordenar por Seleção
– 3) Ordenar por Inserção
• Depois de ordenada pelo método escolhido pelo usuário, a lista deve ser impressa.
• Dica: use como base os programas construídos na aula de hoje!
ENTREGA DOS GRUPOS DE TRABALHO
CONCLUSÕES
Resumo
• Existem diferentes métodos de ordenação
• Dependendo da implementação, pode-se usar mais ou menos memória
• Cada método tem uma eficiência diferente!
• TAREFA
– Estudar!
Próxima Aula
• Lista é a única estrutura?
–Não!
• Vamos ver a Pilha!
PERGUNTAS?
BOM DESCANSO A TODOS!