Você está na página 1de 21

Pesquisa e Ordenação

Métodos de Ordenação

Aula 07
Relembrando – Dividir e Conquistar
 Ideia central:
⌂ Dividir o problema original em subproblemas menores que
possam ser resolvidos mais fácil e rapidamente.
 Ideia para ordenação:
⌂ Dividir: o problema de ordenar uma lista contendo n itens é
transformado em dois subproblemas, cada um ordenando uma
lista com aproximadamente n/2 registros;
⌂ Conquistar: se o tamanho de cada subproblema for
suficientemente pequeno, então proceda a ordenação; senão
volte a dividir;
⌂ Combinar: as soluções parciais são combinadas de modo a se
obter uma solução para o problema original.
Merge Sort
Merge Sort
 A ordenação por intercalação (merge sort) utiliza a
técnica de divisão e conquista.
 A idéia básica do algoritmo MergeSort() para ordenar uma
lista A contendo de n itens é dada pela seguinte definição
recorrente:
⌂ Condição básica – lista com um elemento (n = 1):
• A lista já está ordenada
⌂ Passo recorrente – lista contendo mais de um elemento (n > 1):
• Dividir A em 2 sublistas (A1 e A2) de tamanho aproximado de n/2 itens
• Conquistar: ordenar cada sublista chamando MergeSort recursivamente
• Combinar as sublistas ordenadas formando uma única lista ordenada
(Intercala)
Merge Sort - Funcionamento

Entrada Saída
7 5 2 4 1 6 3 0 0 1 2 3 4 5 6 7
Dividir Intercalar
7 5 2 4 1 6 3 0 2 4 5 7 0 1 3 6
Dividir Intercalar
7 5 2 4 1 6 3 0 5 7 2 4 1 6 03
Dividir Intercalar
7 5 2 4 1 6 3 0 7 5 2 4 1 6 3 0
Merge Sort – Algoritmo (1)
Merge Sort – Algoritmo (2)
Merge Sort – Algoritmo (3)
Vantagens e Desvantagens
 Vantagens:
⌂ Sua função para melhor caso, pior caso e caso médio sempre é
O(n log n);
⌂ Aconselhável para grandes quantidades de dados.
⌂ É um algoritimo estável.
 Desvantagens:
⌂ Devido a sua recursividade, utiliza mais memória;
⌂ Devido a criação de vetores auxiliares, também aumenta o uso
de memória.
Quick Sort
Quick Sort - Introdução
 A ordenação rápida (quick sort) utiliza a técnica de
divisão e conquista.
⌂ Foi inventado por C. A. R. Hoare em 1960, enquanto visitava a
Universidade de Moscou
⌂ Foi publicado por Hoare em 1962, após uma série de
refinamentos.
⌂ É o algoritmo de ordenação interna mais rápido para uma ampla
variedade de situações.
⌂ É uma ordenação in situ.
Quick Sort – Ideia básica
 Dividir (particionar) o problema de ordenar um conjunto
de n itens em dois problemas menores.
 Os dois problemas menores são ordenados
independentemente.
 Os resultados obtidos pela ordenação dos problemas
menores são combinados para produzir a solução do
problema maior.
Quick Sort – Funcionamento de Partição (1)
 Seja A um vetor a ser ordenado, contendo n elementos,
sendo Esq e Dir os índices para o primeiro e último
elemento.
 O funcionamento do algoritmo de Partição é descrito a
seguir, o qual divide A em duas partes:
1. Escolha arbitrariamente um elemento do vetor para ser o pivô.
2. Percorrer o vetor da esquerda (i = Esq) para a direita até que
um elemento A[i] seja maior ou igual ao pivô.
3. Percorrer o vetor da direita (j = Dir) para a esquerda até que um
elemento A[j] seja menor ou igual ao pivô.
4. Permute os elementos A[i] e A[j], pois eles estão fora de
ordem.
5. Repetir as operações de 1 a 4 até que os apontadores i e j se
cruzem (i > j).
Quick Sort – Funcionamento de Partição (2)
 Como resultado da execução do algoritmo de partição
temos que:
⌂ Os elementos de A[Esq] a A[j] são menores ou iguais ao pivô.
⌂ Os elementos de A[i] a A[Dir] são maiores ou iguais ao pivô.
Quick Sort – Funcionamento
 Após a execução da Partição, temos um vetor A dividido
em duas partes, as quais estão parcialmente ordenadas:
⌂ A parte contendo os elementos de A[Esq] a A[j]; e
⌂ A parte contendo os elementos de A[i] a A[Dir].
 As duas partes devem ser ordenadas recursivamente:
⌂ Se Esq < j, então devemos chamar ordenar recursivamente,
ordenando os elementos contidos no intervalo de Esq a j;
⌂ Se i < Dir, então devemos chamar ordenar recursivamente,
ordenando os elementos contidos no intervalo de i a Dir.
Quick Sort – Funcionamento
1 2 3 4 5 6 7
Pivo = 33 86 31 47 33 17 72 25
i = Esq j = Dir
1 2 3 4 5 6 7
25 31 17 33 47 72 86
Esq j i Dir
1 2 3 5 6 7
Pivo = 31 25 31 17 Pivo = 72 47 72 86
i = Esq j = Dir i = Esq j = Dir

1 2 3
25 17 31 47 86
Esq j i, Dir

17 25
Quick Sort – Algoritmo (1)
Quick Sort – Algoritmo (2)
Quick Sort – Análise da Complexidade
 Melhor caso:
⌂ Ocorre quando o vetor é dividido em duas partes iguais:
C(n) = O(n log n)
 Pior caso:
⌂ Ocorre quando o vetor já se encontra ordenado e o pivô se
encontra em uma das extremidades:
C(n) = O(n²)
Quick Sort – Vantagens e Desvantagens
 Vantagens:
⌂ Extremamente eficiente para armazenar arquivos de dados.
⌂ Necessita de apenas uma pequena pilha com memória auxiliar.
⌂ Requer cerca de (n log n) comparações em média para ordenar n
itens.
 Desvantagens:
⌂ Tem um pior caso O(n2) comparações.
⌂ Sua implementação é muito delicada e difícil.
⌂ O método não é estável.
Exercícios
Vide Atividades
Exercícios-Ordenação

Você também pode gostar