• Nenhum resultado encontrado

Quicksort ordenação rápida

N/A
N/A
Protected

Academic year: 2021

Share "Quicksort ordenação rápida"

Copied!
11
0
0

Texto

(1)

P ro f. Y a n d re M a ld o n a d o -1

Quicksort – ordenação

rápida

Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado e Gomes da Costa

P ro f. Y a n d re M a ld o n a d o -2

Quicksort – ordenação rápida

Métodos de ordenação interna:

Simples: complexidade média O(n2); Eficientes: complexidade média O(n log n);

Simples:

Inserção; Seleção; Troca (bolha);

Eficientes:

Shell (ou shellsort); Quick (ou quicksort); Heap (ou heapsort).

P ro f. Y a n d re M a ld o n a d o -3

Quicksort – ordenação rápida



Método proposto por C. A. Hoare, em

1962, na Universidade de Moscou;



É considerado o método de

ordenação mais eficiente até hoje;



Utiliza a estratégia “dividir para

conquistar”;



Dividir um problema em

subproblemas menores e combinar as

soluções a fim de se obter a solução

do problema original;

(2)

P ro f. Y a n d re M a ld o n a d o -4

O método consiste em:

Escolher um pivô inicial x;

Colocar todos itens com chave menor que a de x à esquerda de x, formando uma seqüência S1;

Colocar todos itens com chave maior que a de x à direita de x, formando uma seqüência S2;

Isto feito, o mesmo processo é aplicado às seqüências S1 e S2, que por sua vez produzirão novos segmentos; O processo deve ser aplicado

sucessivamente às seqüências enquanto elas tiverem tamanho ≥1.

P ro f. Y a n d re M a ld o n a d o -5

Quicksort – ordenação rápida

Exemplo de ordenação:

Como pivô inicial, o ideal seria adotar a chave mediana da seqüência;

Entretanto, supondo que a seqüência deve estar distribuída aleatoriamente, será adotado o primeiro elemento da seqüência como pivô, inicialmente ele é copiado para uma variável auxiliar x;

Escolhida da chave da posição 0 como pivô (variável x), esta posição será considerada vazia; 48 51 71 91 43 88 27 5 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F P ro f. Y a n d re M a ld o n a d o -6

Quicksort – ordenação rápida

Exemplo de ordenação:

Observe ao lado direito do vetor o valor da variável “lado”, que pode ser:

•e – quando a primeira posição à esquerda estiver vazia; ou

•d – quando a última posição à direita estiver vazia;

As variáveis I e F serão utilizadas para demarcar os limites que compreendem o segmento do vetor que deve ser percorrido;

48 51 71 91 43 88 27 5 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado

(3)

P ro f. Y a n d re M a ld o n a d o -7

Quando a variável lado é igual a “e” (extremidade esquerda vazia), o valor apontado por F é comparado com o pivô;

Se o valor apontado por F for menor do que o do pivô:

•O valor apontado por F é colocado na posição vazia;

•A posição apontada por F fica vazia; •O valor da variável lado muda para “d”; e •I desloca-se uma posição para a direita.

48 51 71 91 43 88 27 5 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado P ro f. Y a n d re M a ld o n a d o -8

Quicksort – ordenação rápida

Quando a variável lado é igual a “d” (extremidade direita vazia), o valor apontado por I é comparado com o pivô;

Se o valor apontado por I for menor do que o do pivô, I é incrementado; 51 71 91 43 88 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F d lado P ro f. Y a n d re M a ld o n a d o -9

Quicksort – ordenação rápida

Quando a variável lado é igual a “d” (extremidade direita vazia), o valor apontado por I é comparado com o pivô;

Se o valor apontado por I for menor do que o do pivô, I é incrementado; 51 71 91 43 88 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F d lado

(4)

P ro f. Y a n d re M a ld o n a d o -1 0

Quando a variável lado é igual a “d” (extremidade direita vazia), o valor apontado por I é comparado com o pivô;

Se o valor apontado por I for maior do que o do pivô:

•O valor apontado por I é colocado na posição vazia;

•A posição apontada por I fica vazia; •O valor da variável lado muda para “e”; e •F desloca-se uma posição para a esquerda.

51 71 91 43 88 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F d lado P ro f. Y a n d re M a ld o n a d o -1 1

Quicksort – ordenação rápida

Quando a variável lado é igual a “e” (extremidade esquerda vazia), o valor apontado por F é comparado com o pivô;

Se o valor apontado por F for maior do que o do pivô, F é decrementado; 88 51 71 91 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado P ro f. Y a n d re M a ld o n a d o -1 2

Quicksort – ordenação rápida

Quando a variável lado é igual a “e” (extremidade esquerda vazia), o valor apontado por F é comparado com o pivô;

Se o valor apontado por F for maior do que o do pivô, F é decrementado; 88 51 71 91 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado

(5)

P ro f. Y a n d re M a ld o n a d o -1 3

Quando a variável lado é igual a “e” (extremidade esquerda vazia), o valor apontado por F é comparado com o pivô;

Se o valor apontado por F for maior do que o do pivô, F é decrementado; 88 51 71 91 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado P ro f. Y a n d re M a ld o n a d o -1 4

Quicksort – ordenação rápida

Quando a variável lado é igual a “e” (extremidade esquerda vazia), o valor apontado por F é comparado com o pivô;

Se o valor apontado por F for menor do que o do pivô:

•O valor apontado por F é colocado na posição vazia;

•A posição apontada por F fica vazia; •O valor da variável lado muda para “d”; e •I desloca-se uma posição para a direita.

88 51 71 91 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F e lado P ro f. Y a n d re M a ld o n a d o -1 5

Quicksort – ordenação rápida



Neste ponto, os ponteiros I e F se

encontram;



Com isto, faz-se a inserção do pivô

nesta posição.

88 51 71 91 50 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I ↑ F 88 51 71 91 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I 50 x ↑ F d lado

(6)

P ro f. Y a n d re M a ld o n a d o -1 6



A partir desta situação, o mesmo

processo é aplicado aos segmentos

S1 e S2, até que se obtenha

segmentos de tamanho

1 (que já

estão naturalmente ordenados).

88 51 71 91 50 43 27 5 48 8 7 6 5 4 3 2 1 0 ↑ I ↑ F S1 S2 P ro f. Y a n d re M a ld o n a d o -1 7

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 88 51 71 50 43 27 5 8 7 6 5 4 3 2 1 0 ↑ I ↑ F ↑ I ↑ F 48 x e lado 91 x e lado P ro f. Y a n d re M a ld o n a d o -1 8

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 51 71 88 50 27 5 43 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 48 x x 91 d lado d lado ↑ F ↑ F

(7)

P ro f. Y a n d re M a ld o n a d o -1 9



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 51 71 88 50 27 5 43 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 48 x x 91 d lado d lado ↑ F ↑ F P ro f. Y a n d re M a ld o n a d o -2 0

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 51 71 88 50 27 5 43 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 48 x x 91 d lado d lado ↑ F ↑ F P ro f. Y a n d re M a ld o n a d o -2 1

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 51 71 88 50 48 27 5 43 8 7 6 5 4 3 2 1 0 S3 S4

(8)

P ro f. Y a n d re M a ld o n a d o -2 2



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 51 71 50 48 27 5 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 43 x x 88 e lado e lado ↑ F ↑ F P ro f. Y a n d re M a ld o n a d o -2 3

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 71 51 50 48 5 27 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 43 x x 88 d lado d lado ↑ F ↑ F P ro f. Y a n d re M a ld o n a d o -2 4

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 71 51 50 48 5 27 8 7 6 5 4 3 2 1 0 ↑ I ↑ I 43 x x 88 d lado d lado ↑ F ↑ F

(9)

P ro f. Y a n d re M a ld o n a d o -2 5



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 88 71 51 50 48 43 5 27 8 7 6 5 4 3 2 1 0 S5 S6 P ro f. Y a n d re M a ld o n a d o -2 6 ↑ I 27 x e lado ↑ F

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 88 71 50 48 43 5 8 7 6 5 4 3 2 1 0 ↑ I 51 x e lado ↑ F P ro f. Y a n d re M a ld o n a d o -2 7 ↑ I 27 x d lado ↑ F

Quicksort – ordenação rápida



As próximas figuras ilustram os

próximos passos no processo de

ordenação;

•Note que a ordenação dos novos segmentos acontecem em paralelo nesta representação. 91 88 71 50 48 43 5 8 7 6 5 4 3 2 1 0 ↑ I 51 x e lado ↑ F

(10)

P ro f. Y a n d re M a ld o n a d o -2 8 91 88 71 51 50 48 43 27 5 8 7 6 5 4 3 2 1 0 S7 S8 Seqüência de tamanho = 1 P ro f. Y a n d re M a ld o n a d o -2 9

Quicksort – ordenação rápida

91 88 71 51 50 48 43 27 5 8 7 6 5 4 3 2 1 0 Fim da execução! P ro f. Y a n d re M a ld o n a d o -3 0

Quicksort – ordenação rápida



Desempenho do Quicksort:



Médio: O (n log n);



Pior caso: pode chegar a O (n

2

);

•Esta variação ocorre em função da

escolha aleatória do pivô inicial;



Excelente opção para situações

genéricas;



Método “paralelizável”;



Desempenho médio duas vezes mais

eficiente que o Heapsort.

(11)

P ro f. Y a n d re M a ld o n a d o -3 1

Azeredo, P. A. Métodos de Classificação de Dados e Análise de suas Complexidades. Rio de Janeiro: Editora Campus, 1996;

Goodrich e Tamassia. Projeto de Algoritmos. Porto Alegre: Bookman, 2002;

Celes, W; Cerqueira, R. e Rangel, J. L. Introdução a Estruturas de Dados. Rio de Janeiro: Editora Campus, 2004;

Moraes, Celso Roberto. Estruturas de Dados e Algoritmos. São Paulo: Berkeley Brasil, 2001;

Ziviani, N. Projeto de Algoritmos. São Paulo: Pioneira Thomson Learning, 2002.

Referências

Documentos relacionados

Grupo SAGEM/FORPLAD - SPO/MEC – UnB/CEAG Sistemas de Avaliação de Gestão de Meios.. Ordenação dos Critérios Grau

(A partir das respostas das questões anteriores, construa um texto, expressando sua interpretação). Para esse enunciado, o aluno deveria aproveitar todas as

Os resultados mostram que a implementação dos métodos de ordenação tornaram os algoritmos mais rápidos que o pro- tocolo original de Baptista, com destaque ao QuickSort, que foi

b) Candidato excluído por obtenção de resultado inferior a 9,5 valores no método obrigatório de seleção, prova de conhecimentos, nos termos do n.º 13 do art.º 18º da Portaria

O Quicksort é um algoritmo do tipo dividir para conquistar para ordenação cujo tempo de execução no pior caso é O(n 2 ) sobre uma seqüência de entrada de n números.. Apesar

Caso a busca tenha que continuar, podemos proceder exatamente da mesma maneira: verificamos o item existente no meio da metade escolhida e se ele ainda não for aquele que

Assim, foram recenseadas as seguintes UPPs: entre as que já estavam instaladas em 2010, Caratê (Cidade de Deus), na Zona Oeste, e Chapéu Mangueira/Babilônia, em área

e) Participar de seminários e atividades presenciais nos polos de apoio presencial de atuação do Curso de Licenciatura em Educação Física , na modalidade à