Professional Documents
Culture Documents
Chaves Iniciais O R D E N A
i=1 A R D E N O
i=2 A D R E N O
i=3 A D E R N O
i=4 A D E N R O
i=5 A D E N O R
Algoritmos de Ordenação
VARIÁVEIS
Vetor : VETOR[0..10] DE INTEIRO
i : INTEIRO
PROCEDIMENTO SELECAO (vetor:VETOR DE INTEIRO, tamanho: INTEIRO)
VARIÁVEIS
i, j, menor : INTEIRO
x : elemento da lista
INÍCIO
PARA i DE 1 ATÉ tamanho-1 FAÇA
menor i
PARA j DE i+1 ATÉ TAMANHO FAÇA
SE vetor [j] < vetor [menor] FAÇA
menor j
FIMPARA
x vetor [menor]
vetor [menor] vetor [i]
vetor [i] x
FIMPARA
FIM
Algoritmos de Ordenação
INÍCIO
PARA i DE 1 ATÉ 10 FAÇA
LEIA vetor [i]
FIMPARA
Chaves Iniciais O R D E N A
i=2 O R D E N A
i=3 D
O O R E N O
A
i=4 D E O R N A
i=5 D E N O R A
i=6 A D E N O R
Algoritmos de Ordenação
VARIÁVEIS
Vetor : VETOR[1..10] DE INTEIRO
i, j, chave : INTEIRO
INÍCIO
PARA i DE 1 ATÉ 10 FAÇA
LEIA vetor [i]
FIMPARA
PARA j DE 2 ATÉ 10 FAÇA
chave vetor [j]
i j-1
ENQUANTO ( i > 0 ) E (vetor[i] > chave ) FAÇA
vetor [i + 1] vetor [i]
i i-1
FIMENQUANTO
VETOR [i + 1] chave
FIMPARA
FIM
Algoritmo da bolha - Bubble Sort
• Idéia básica
– Troca pares de elementos adjacentes que estão fora
de ordem
– Faz múltiplas passagens pelo array até que as trocas
não sejam mais necessárias
– Invariante
•A cada passagem coloca o maior elemento na posição
correta, a última posição para aquela passagem
Obs: Esse método é um dos mais conhecidos e simples,
mas um dos piores.
Algoritmo da bolha: execução
12 8 3 21 99 1 início
3 8 12 21 1 99 troca (1, 2)
3 8 12 21 1 99 não troca
3 8 12 21 1 99 não troca
3 8 12 1 21 99 troca (4, 5)
3 8 12 1 21 99 21 na posição
Algoritmo da bolha: execução (cont.)
3 8 12 1 21 99 Passo 3
3 8 12 1 21 99 não troca
3 8 12 1 21 99 não troca
3 8 1 12 21 99 troca (3, 4)
3 8 1 12 21 99 12 na posição; passo 4
3 8 1 12 21 99 não troca
3 1 8 12 21 99 troca (2, 3)
3 1 8 12 21 99 8 na posição; passo 5
1 3 8 12 21 99 troca (1, 2)
1 3 8 12 21 99 FEITO
Algoritmos de Ordenação
VARIÁVEIS
Vetor : VETOR[1..10] DE INTEIRO
i : INTEIRO
PROCEDIMENTO bublesort (vetor:VETORDE INTEIRO, tamanho: INTEIRO)
VARIÁVEIS
i, j, temp : INTEIRO
INÍCIO
PARA i DE 1 ATÉ tamanho FAÇA
PARA j DE 1 ATÉ TAMANHO-1 FAÇA
SE vetor [j] > vetor [j+1] FAÇA
temp vetor [j]
vetor [J] vetor [j+1]
vetor [j+1] temp
FIMSE
FIMPARA
FIMPARA
FIM
Algoritmos de Ordenação
INÍCIO
PARA i DE 1 ATÉ 10 FAÇA
LEIA vetor [i]
FIMPARA
MÉTODOS SOFISTICADOS OU
EFICIENTES
Ordenação por Particionamento ou Quicksort
• O Quicksort é o algoritmo mais rápido para ordenação interna já
conhecido, sendo por isso o mais utilizado entre todos os algoritmos
de ordenação para uma grande quantidade de situações.
• Princípio
1. Dividir o problema de ordenar um conjunto de n itens
em dois problemas menores
2. Ordenar independentemente os problemas menores
3. Combinar os resultados para produzir a solução do
problema maior
Partição
Chaves Iniciais O R D E N A
i=2 A R D E N O
i=3 A D R E N O
Chaves Iniciais O R D E N A
i=1 A D R E N O
i=2 A D
i=3 E R N O
i=4 N R O
i=5 O R
i=6 A D E N O R
Procedimento Partição
VARIÁVEIS
vetor : VETOR[0...10] DE INTEIRO
i : INTEIRO
PROCEDIMENTO quicksort(variavel vetor : VETOR DE INTEIRO, primeiro :
INTEIRO, último : INTEIRO)
VARIÁVEIS
menor : INTEIRO
maior : INTEIRO
separador : INTEIRO
temp : INTEIRO
INÍCIO
menor primeiro
maior último
separador vetor[(primeiro + último) / 2]
Procedimento Partição
REPITA
ENQUANTO vetor[menor] < separador FAÇA
menor menor + 1
FIMENQUANTO
ENQUANTO vetor[maior] > separador FAÇA
maior maior - 1
FIMENQUANTO
SE menor <= maior FAÇA
temp vetor[menor]
vetor[menor] vetor[maior]
vetor[maior] temp
menor menor + 1
maior maior - 1
FIMSE
ATÉ QUE menor > maior
Procedimento Partição
SE primeiro < maior FAÇA
quicksort(vetor, primeiro, maior)
FIMSE
SE menor < último FAÇA
quicksort(vetor, menor, último)
FIMSE
FIM
INÍCIO {Programa Principal}
PARA i DE 1 ATÉ 10 FAÇA
LEIA vetor[i]
FIMPARA
quicksort(vetor, 1, 10)
PARA i DE 1 ATÉ 10 FAÇA
ESCREVA vetor[i]
FIMPARA
FIM
Analisando a procedure
• O vetor é uma variável global ao procedimento
Partição
• Obs: note que o laço interno do algoritmo de
partição só faz incrementos e decrementos; daí
a velocidade do algoritmo
Referências
• Transparências disponibilizadas pelo Prof.
Ziviani, a partir do Livro Projeto de Algoritmos
com Implementação em Pascal e C, M. A. da
Silva Bigonha e Nívio Ziviani, Campus
• Algoritmos e Estruturas de Dados, N. Wirth,
Prentice-Hall
• Curso on-line Estrutura de Dados I, USP – São
Carlos