Geometria Computacional
2013.1
Algoritmos de Ordenação:
Quicksort
Ismália Santiago
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
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
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
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
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
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
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
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
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

Quicksort

  • 1.
  • 2.
  • 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étodode 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  Ofuncionamento 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 dePartition  (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 daComplexidade  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 daComplexidade  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