Professional Documents
Culture Documents
Ordenação e Busca
Me. Fabianni Roberto Teles
Ordenação (Conceitos iniciais)
• Definição: Ordenar corresponde ao processo de
rearranjar um conjunto de objetos em uma ordem
ascendente ou descendente.
• O objetivo principal da ordenação é facilitar a
recuperação posterior de itens do conjunto ordenado, ou
seja, REDUZIR O CUSTO DA EXECUÇÃO DO
ALGORITMO.
• Imagine como seria difícil efetuar uma busca de uma
chave numérica se os valores não estivessem listados
em ordem. A atividade de colocar as coisas em ordem
está presente na maioria das aplicações onde os objetos
armazenados têm que ser pesquisados e recuperados,
tais como banco de dados, tabelas, arquivos e índices de
forma geral.
• Qual é o melhor algoritmo? Compensa ordenar? CUSTO
é importante?
Várias opções de algoritmos...
CUSTO
Outras justificativas
TipoItem = record
chave: TipoChave;
{outras declarações desejadas...}
end;
Ordenação Interna x Externa
• Ordenação por Seleção (Selection Sort)
Métodos
• Ordenação por Inserção (Insertion Sort) Simples
• Ordenação por Seleção e Troca (Bubble Sort)
• Ordenação por Inserção através de incrementos
Métodos
decrescentes (ShellSort) Eficientes
• Ordenação por Particionamento (QuickSort)
• Ordenação de Árvores (HeapSort)
Ordenação Interna
EXEMPLOS
Ordenação por Seleção
(Selection Sort)
• Um dos algoritmos mais simples.
• Mais recomendado para conjuntos
pequenos.
• Procedimento:
Selecione o menor item do conjunto e troqueo
com o item que está na posição i.
Repita essas operações com os demais itens até
que reste apenas um elemento.
Ordenação por seleção
1) A posição dos registros no vetor influencia em seu funcionamento? Caso sim, qual o
melhor e pior caso?
2) Quando a linha V[i+1] = chave é executada?
OBSERVAÇÕES
O número mínimo de comparações e movimentos ocorre quando os
itens estão originalmente em ordem, e o número máximo ocorre
quando os itens estão originalmente na ordem reversa.
Para arquivos já ordenados, o algoritmo descobre, a um custo 0(n),
que cada item já está no seu lugar. Logo, o método da inserção é o
método a ser utilizado quando o arquivo está "quase" ordenado. E
também um bom método quando se deseja adicionar uns poucos
itens a um arquivo já ordenado e depois obter um outro arquivo
ordenado: neste caso o custo é linear.
O algoritmo de ordenação por inserção é quase tão simples quanto o
algoritmo de ordenação por seleção. Além disso, o método de
ordenação por inserção é estável, pois ele deixa os registros com
chaves iguais na mesma posição relativa.
<>
CUSTO
• Menor número de trocas e comparações entre os algoritmos
de ordenação Ω(n) quando o vetor está ordenado.
• Pior caso Θ(n2)
• Percebese que este algoritmo não tem um custo fixo. Se
todo o vetor estiver ordenado, ele nunca precisará iterar o i
e portanto será executado bem mais rápido do que se o
vetor estiver inteiro em ordem decrescente (quando ele
sempre precisará iterar i até o fim 0).
Ordenação BOLHA
Resumo
• O bubble sort, ou ordenação por flutuação
(literalmente "por bolha"), é um algoritmo
de ordenação dos mais simples. A ideia é
percorrer o vetor diversas vezes, a cada
passagem fazendo flutuar para o topo o
maior elemento da sequência. Essa
movimentação lembra a forma como as
bolhas em um tanque de água procuram
seu próprio nível, e disso vem o nome do
algoritmo.
• Os elementos maiores são mais leves, e sobem como
bolhas até suas posições corretas. A ideia
fundamental é fazer uma série de comparações entre
os elementos do vetor. Quando dois elementos estão
fora de ordem, há uma inversão e esses dois
elementos são trocados de posição, ficando em ordem
correta. Assim, o primeiro elemento é comparado
com o segundo. Se uma inversão for encontrada, a
troca é feita. Em seguida, independente se houve ou
não troca após a primeira comparação, o segundo
elemento é comparado com o terceiro, e, caso uma
inversão seja encontrada, a troca é feita. O processo
continua até que o penúltimo elemento seja
comparado com o último. Com este processo, garante
se que o elemento de maior valor do vetor será levado
para a última posição. A ordenação continua,
posicionando o segundo maior elemento, o terceiro,
etc., até que todo o vetor esteja ordenado.
Resumo:
• Comparamse dois elementos e trocamse suas posições
se o segundo elemento é menor do que o primeiro.
• São feitas várias passagens pela tabela.
• Em cada passagem, comparamse dois elementos
adjacentes.
• Se estes elementos estiverem fora de ordem, eles são
trocados.
• A complexidade desse algoritmo é de Ordem quadrática.
Por isso, ele não é recomendado para programas que
precisem de velocidade e operem com quantidade elevada
de dados.
Vantagens:
• Simplicidade do algoritmo.
• Estável.
Desvantagens
• Lentidão.
Indicações
• Tabelas muito pequenas.
• Quando se sabe que a tabela está
quase ordenada.
...Busca
(Considerações finais)
Como realizar?
• A Recuperação de Informação é uma das tarefas mais importantes
em computação;
• A busca por chaves que localizam registros é, em geral, a
tarefa que consome mais tempo de um programa;
• Dessa maneira, o modo como os registros estão organizados e
a escolha do método utilizado para realizar a busca podem
fazer diferença na performance do programa;
• Os algoritmos de pesquisa (busca ou "search"), tem como objetivo
pesquisar, procurar um particular elemento dentro de uma grande
quantidade de dados de forma eficiente.
• A eficiência do método de busca a ser usado, também depende da
organização dos dados;
• Na prática, estes algoritmos são usados simplesmente para:
• 1. retornar o elemento procurado (algoritmo de busca) quando
este existe e
• 2. às vezes adicionar um elemento quando este não pertence ao
conjunto total (algoritmo de busca e inserção).
Obs.: se um arquivo é pequeno, sofisticadas técnicas de classificação
projetadas para minimizar espaço e tempo são usualmente piores
ou...
somente pouco eficientes que outros métodos mais simples,
geralmente menos eficientes.
Principais
algoritmos de
busca
Sequencial e Binária
Pesquisa Sequencial
De qualquer maneira, o
número de comparações é
Pesquisa Binária
OUTROS (revisão em casa)
• Ziviani, N.
Projeto de Algoritmos com Implementações em Java e
C++
, São Paulo, Brazil, Thomson Learning, ISBN 85221
05251
• http://www.youtube.com/watch?v=3titr0Hx8UU&featu
re=related
Insertion sort
• Arquivo insertion.pdf
• Vídeo InsertionSort.wmv
OUTROS (revisão em casa)
• Ziviani, N.
Projeto de Algoritmos com Implementações em Java e
C++
, São Paulo, Brazil, Thomson Learning, ISBN 85221
05251
• http://www.youtube.com/watch?v=3titr0Hx8UU&featu
re=related
Exercício + Vídeo
(Estudo/Revisão em casa)
• Vídeo: BubbleSort.mp4.
REFERÊNCIAS BIBLIOGRÁFICAS
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduction to Algorithms, 3rd
edition, MIT Press, 2009.
Ziviani, N. Projeto de Algoritmos com Implementações em Java e C++, São Paulo, Brazil,
Thomson Learning, ISBN 8522105251
Horowitz, E. and Sahni, S. (1987). Fundamentos de Estruturas de Dados. Ed. Campus.
Kruse, R. (1997).
Data structures & program design in C. Prentice Hall, New Jersey, 2 edition. Lee, H. D.
(2000). Notas didáticas. Algoritmos e Estruturas de Dados.