Slides feitos para a disciplina de Geometria Computacional (CK0173 - Modelagem em Computação Gráfica II), ofertada pelo Departamento de Computação da Universidade Federal do Ceará.
3. 3
Conteúdo
1. Introdução
2. Descrição
2.1. O algoritmo
2.2. Funcionamento de Partition
3. Estudo da Complexidade
Pior caso
Melhor caso
4. Análise
Vantagens
Desvantagens
5. Referências
Geometria Computacional
4. 4
1. Introdução
Método de ordenação rápido e eficiente
Proposto por Sir Charles Antony Richard Hoare em
1960 e publicado em 1962 após uma série de
refinamentos
Dividir e conquistar
Método de ordenação interna, ou seja, não necessita
de uma memória secundária para o processo (a
ordenação é feita na memória principal do
computador)
Geometria Computacional
5. 5
2. Descrição
O funcionamento do Quicksort resume-se a
dividir o problema de ordenar um vetor de n
posições em dois outros menores:
Dividir: O array A[p..r] é particionado em dois subarrays
(possivelmente vazios) A[p..q-1] e A[q+1..r]
• Cada elemento de A[p..q-1] é menor ou igual a A[q], que, por sua
vez, é igual ou menor a cada elemento de A[q+1..r]
Conquistar: O dois subarrays A[p..q-1] e A[q+1..r] são
ordenados por chamadas recursivas a quicksort
Combinar: Os subarrays que foram ordenados localmente
são combinados e produzem a solução final
Geometria Computacional
6. 6
2.1. O algoritmo
Quicksort(A, p, r)
1 se p < r então
2 q Partition (A, p, r)
3 Quicksort(A, p, q-1)
4 Quicksort(A, q+1, r)
Partition(A, p, r)
1 x A[r]
2 i p - 1
3 para j p até r-1 faça
4 se A[j] <= x então
5 i i + 1
6 troque A[i] A[j]
7 troque A[i+1] A[r]
8 retorne i+1
Geometria Computacional
Elemento pivô
A[p .. q-1] <= pivô < = A[q+1 .. r]
7. 7
2.2. Funcionamento de Partition
(a) O arranjo inicial e as configurações
de variáveis
(b) O valor 2 é “trocado com ele mesmo”
e inserido na partição de valores
menores
(c) e (d) Os valores 8 e 7 foram
acrescentados à partição de valores
maiores
(e) Os valores 1 e 8 são permutados, e a
partição menor cresce
(f) Os valores 3 e 8 são permutados , e a
partição menor cresce
(g) e (h) A partição maior cresce até
incluir 5 e 6 e o loop termina
(i) O elemento pivô é permutado de
forma a residir entre as duas partições
Geometria Computacional
8. 8
3. Estudo da Complexidade
Pior caso
Tempo de execução: O(n²)
Acontece quando o particionamento não é balanceado ou
quando o array de entrada já está completamente ordenado.
Geometria Computacional
9. 9
3. Estudo da Complexidade
Melhor caso
Tempo de execução: O(n lgn)
Acontece quando as partições têm sempre o mesmo tamanho
(partições balanceadas).
Geometria Computacional
10. 10
4. Análise
Vantagens
Ótima opção para ordenar arquivos grandes
Necessita apenas de uma pequena pilha como memória
extra (altura da pilha não passa de lg(n) se o vetor tiver n
elementos)
Complexidade no melhor caso é O(n lgn)
Desvantagens
Não é estável
Tem pior caso de O(n²)
A escolha correta do pivô é essencial para a garantia de
eficiência do algoritmo
Geometria Computacional
11. 11
5. Referências
CORMEN, Thomas H.; LEISERSON, Charles
E.; RIVEST, Ronald L.; STEIN, Clifford;
Introduction to Algorithms. Second Edition.
http://homepages.dcc.ufmg.br/~cunha/te
aching/20121/aeds2/quicksort.pdf
http://pt.wikipedia.org/wiki/Quicksort
http://www.ime.usp.br/~pf/algoritmos/au
las/quick.html
http://www.decom.ufop.br/menotti/aedI0
82/tps/tp3-sol1.pdf
Geometria Computacional