• Nenhum resultado encontrado

Algoritmos de ordenação: Quicksort

N/A
N/A
Protected

Academic year: 2022

Share "Algoritmos de ordenação: Quicksort"

Copied!
20
0
0

Texto

(1)

Algoritmos de ordenação:

Quicksort

Algoritmos e Estruturas de Dados I

Natália Batista

https://sites.google.com/site/nataliacefetmg/

nataliabatista@decom.cefetmg.br

2º semestre/ 2018

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi Menotti (DECOM/UFOP) e Antônio Alfredo Ferreira Loureiro (DCC/UFMG).

(2)

1. Quicksort

 Proposto por Hoare em 1960 e publicado em 1962.

 É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações.

 Provavelmente é o mais utilizado.

(3)

3

1. Quicksort

 Abordagem divisão e conquista:

 Dividir a entrada em conjuntos menores.

 Resolver cada instância menor de maneira recursiva.

 Reunir as soluções parciais para compor a

solução do problema original.

(4)

1. Quicksort

 A ideia básica é dividir o problema de ordenar um conjunto com n itens em dois problemas menores.

 Os problemas menores são ordenados independentemente.

 Os resultados são combinados para produzir

a solução final.

(5)

5

1. Quicksort

 A parte mais delicada do método é o processo de partição.

 O vetor A[Esq..Dir] é rearranjado por meio da escolha arbitrária de um pivô x.

 O vetor A é particionado em duas partes:

 A parte esquerda com chaves menores ou iguais a x.

 A parte direita com chaves maiores ou iguais a x.

(6)

1. Quicksort

 Algoritmo para o particionamento:

1. Escolha arbitrariamente um pivô x.

2. Percorra o vetor a partir da esquerda até que A[i] ≥ x.

3. Percorra o vetor a partir da direita até que A[j] ≤ x.

4. Troque A[i] com A[j].

5. Continue este processo até os apontadores i e j se

cruzarem.

(7)

7

1. Quicksort

 Ao final, o vetor A[Esq..Dir] estará particionado de tal forma que:

 Os itens em A[Esq], A[Esq + 1], . . . , A[j] são menores ou iguais a x.

 Os itens em A[i], A[i + 1], . . . , A[Dir] são maiores

ou iguais a x.

(8)

1. Quicksort

 Ilustração do processo de partição:

 O pivô x é escolhido como sendo A[(i + j) / 2].

 Como inicialmente i = 1 e j = 6, então x = A[3] = D.

(9)

9

1. Quicksort

 Ao final do processo de partição i e j se cruzam em i = 3 e j = 2.

Trocas i j

O ↔ A 1 6

- 2 5

- 2 4

D ↔ R 2 3

- 3 2

(10)

1. Quicksort

 Partição:

void Particao(TipoIndice Esq, TipoIndice Dir,

TipoIndice *i, TipoIndice *j, TipoItem *A) { TipoItem x, w;

*i = Esq; *j = Dir;

x = A[(*i + *j) / 2]; /* obtem o pivo x */

do

{ while (x.Chave > A[*i].Chave) (*i)++;

while (x.Chave < A[*j].Chave) (*j)--;

if (*i <= *j) { w = A[*i];

A[*i] = A[*j];

A[*j] = w;

(*i)++; (*j)--;

}

(11)

11

1. Quicksort

 Os aneis internos do procedimento Particao são simples:

 incrementa um apontador e compara um item do vetor com x

 decrementa um apontador e compara um item do vetor com x

 Razão pela qual o algoritmo Quicksort é tão

rápido.

(12)

1. Quicksort

 Procedimentos Ordena e QuickSort:

void Ordena(TipoIndice Esq, TipoIndice Dir, TipoItem *A) { TipoIndice i, j;

Particao(Esq, Dir, &i, &j, A);

if (Esq < j) Ordena(Esq, j, A);

if (i < Dir) Ordena(i, Dir, A);

}

void QuickSort(TipoItem *A, TipoIndice n) { Ordena(1, n, A);

}

(13)

13

1. Quicksort

 Exemplo do estado do vetor em cada chamada

recursiva do procedimento Ordena:

(14)

1. Quicksort

Análise

 Qual o pior caso para o Quicksort?

Por quê?

Qual sua ordem de complexidade?

 Qual o melhor caso?

 O algoritmo é estável?

(15)

15

1. Quicksort

 Pior caso: C(n) = O(n 2 )

 O pior caso ocorre quando, sistematicamente, o pivô é escolhido como sendo um dos extremos de um arquivo já ordenado.

 Isto faz com que o procedimento Ordena seja chamado recursivamente n vezes, eliminando apenas um item em cada chamada.

C(n) é a função que

conta o número

de comparações.

(16)

1. Quicksort

 Pior caso:

 O pior caso pode ser evitado empregando pequenas modificações no algoritmo.

 Para isso basta escolher três itens quaisquer do

vetor e usar a mediana dos três como pivô.

(17)

17

1. Quicksort

 Melhor caso:

C(n) = 2 C(n/2) + O (n)

onde C(n/2) representa o custo de ordenar uma das metades e n-1 é o número de comparações realizadas.

C(n) = nlogn - O(n)

(18)

1. Quicksort

 Caso médio:

de acordo com Sedgewick e Flajolet (1996).

 Isso significa que em média o tempo de

execução do Quicksort é O(n log n).

(19)

19

1. Quicksort

 Vantagens:

É extremamente eficiente para ordenar arquivos de dados.

Necessita de apenas uma pequena pilha como memória adicional.

Requer cerca de n log n comparações em média para ordenar n itens.

 Desvantagens

Tem um pior caso O(n

2

) comparações.

Sua implementação é delicada e difícil: um pequeno engano pode levar a efeitos inesperados para algumas entradas de dados.

 O método não é estável.

(20)

Referências

 Ziviani, N. Projeto de algoritmos: com implementações em Java e C++. 3 ed. Editora Cengage Learning, 2007.

 Loureiro, A. A. F. Projeto e Análise de Algoritmos:

Análise de Complexidade. Notas de aula, 2010.

 Menotti, D. Ordenação. Notas de aula, 2009.

Referências

Documentos relacionados

No primeiro, “A história do IFSULDEMINAS - Campus Inconfidentes: compreendendo a formação no Ensino Médio Integrado ao técnico em 100 anos de escolarização técnica no Brasil”,

O Pós-Positivismo, ao reabilitar o uso da razão prática e inseri-la na metodologia de aplicação do Direito, propõe a possibilidade de se definir a norma aplicável ao caso concreto

8- Se o usuário não aparar o esforço da Motosserra, há um risco de que a motosserra seja empurrada de tal modo para trás que o setor de risco de retrocesso da lâmina será o

 Ambos os sistemas de medição foram Ambos os sistemas de medição foram recentemente calibrados e estão operando em recentemente calibrados e estão operando em

Para completar o pesadelo, o Ministro de Minas e Energia é um rapaz de 33 anos, formado em administração de empresas pela FAAP, sem qualquer especialização na

Ao considerar a importância do fenômeno do uso de ál- cool na contemporaneidade e a necessidade de identifica- ção de fatores protetores, como parece ser o caso da espiri-

Machos Duroc são mais pesados ao nascer do que machos Pietrain e do que fêmeas das duas raças, e apresentam maior taxa de crescimento diário devido ao seu

Neste trabalho estudamos as defini¸ c˜ oes, teoremas e exemplos sobre existˆ encia e unicidade de solu¸ c˜ oes, adimensionalisa¸ c˜ ao da equa¸ c˜ ao, princ´ıpio de