Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um...

19
Ordenação Interna

Transcript of Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um...

Page 1: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Ordenação Interna

Page 2: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Quick sort

– Paradigma divisão e conquista;

– Tempo de execução no pior caso é Θ(n²);

– Tempo esperado é Θ(n log n);

– Constante da notação é pequena;

– Ordenação in-place, requer um número de memória fora da estrutura de dados.

Page 3: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Seguir

Cap4 - Ordenação - Seção 4.1.1 - Livro Projeto de Algoritmos

Disponível no DCC

Vetor a ser utilizado:

4 3 1 5 7 6

Page 4: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Princípio - Quick sort

Para ordenar um vetor 𝐴 𝑒𝑠𝑞 …𝑑𝑖𝑟 :

- Divisão: o vetor é particionado em “dois subvetores” não-vazios, 𝐴 𝑒𝑠𝑞 …𝑚𝑒𝑖 e 𝐴 𝑚𝑒𝑖 + 1…𝑑𝑖𝑟 :- 𝐴 𝑒𝑠𝑞 …𝑚𝑒𝑖 valores menores ou igual ao pivô;

- 𝐴 𝑚𝑒𝑖 + 1…𝑑𝑖𝑟 valores maiores ao pivô;

- Conquista: os “dois subvetores” são ordenados por chamadas recursivas a quicksort;

Page 5: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Código – Quick sort

Quicksort(A,esq,dir)

if esq < dir then

mei = particiona(A,esq,dir)

quicksort(A,esq,mei)

quicksort(A,mei + 1 ,dir)

Chamada Inicial: quicksort(A, 1, n)

Page 6: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Código – Partição

Particiona(A, esq, dir)

x = A[dir] //x é o pivô

i = esq – 1

for j = esq até dir - 1 do

if A[j] menor ou igual a x faça

i = i+ 1

A[i] ↔ A[j]

A[i+1] ↔ A[dir]

Devolve i + 1 //posição do pivô

Page 7: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Problema

Rearranjar um dado vetor 𝐴 𝑒𝑠𝑞 …𝑑𝑖𝑟 e devolver

um índice 𝑚𝑒𝑖, 𝑒𝑠𝑞 ≤ 𝑚𝑒𝑖 < 𝑑𝑖𝑟, tais que:

𝐴 𝑒𝑠𝑞 …𝑚𝑒𝑖 − 1 ≤ 𝐴 𝑚𝑒𝑖 < 𝐴[𝑚𝑒𝑖 + 1…𝑑𝑖𝑟]

Entra:

Sai:

esq mei dir

A 18 20 20 99 52 42 40 60 98 88

esq mei dir

A 88 42 52 99 20 20 40 60 98 18

Page 8: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

particiona(A, esq, dir)Pivô: 88

esq dir

A 18 42 52 99 20 20 40 60 98 88

↑ ↑

esq dir

A 18 42 52 99 20 20 40 60 88 98

↑ ↑esq dir

A 18 42 52 99 20 20 40 60 88 98

↑ ↑esq dir

A 18 42 52 99 20 20 40 60 88 98

↑ ↑

Page 9: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

particiona(A,esq,dir)

esq mei dir

A 18 20 20 99 52 42 40 60 98 88

esq mei dir

A 18 20 52 99 20 42 40 60 98 88

↑ ↑

esq mei dir

A 18 20 52 99 20 42 40 60 98 88

↑ ↑

Page 10: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Análise - particiona(A,esq,dir)

– O algoritmo particiona consome tempo Θ(n);

– O laço interno do procedimento particiona é extremamente simples;

– Razão pela qual o algoritmo quicksort é tão rápido.

Page 11: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

quicksort(A, 1, 3)

esq mei dir

A 18 20 20 99 52 42 40 60 98 88

↑ ↑

esq mei dir

A 18 20 20 99 52 42 40 60 98 88

↑ ↑

esq mei dir

A 18 20 20 99 52 42 40 60 98 88

Page 12: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

quicksort(A, 4, n)

esq mei dir

A 18 20 20 40 52 42 99 60 98 88

↑ ↑esq mei dir

A 18 20 20 40 52 42 99 60 98 88

↑ ↑esq mei dir

A 18 20 20 40 52 42 99 60 98 88

↑ ↑esq mei dir

A 18 20 20 40 52 42 60 99 98 88

↑ ↑

Page 13: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

quicksort(A, 3, 6)

esq mei dir

A 18 20 20 40 52 42 60 99 98 88

↑ ↑

esq mei dir

A 18 20 20 40 52 42 60 99 98 88

↑ ↑

esq mei dir

A 18 20 20 40 42 52 60 99 98 88

↑ ↑

Page 14: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

quicksort(A, 7, n)

esq mei dir

A 18 20 20 40 42 52 60 99 98 88

↑ ↑

esq mei dir

A 18 20 20 40 42 52 60 88 98 99

↑ ↑

A 18 20 20 40 42 52 60 88 98 99

Page 15: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Quick sort- Análise– Seja C(n) a função que conta o número de comparações.

– Pior caso: C(n) = O(n²);

– 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 seja chamado recursivamente n vezes, eliminando apenas um item em cada chamada.

– 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ô.

Page 16: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Vantagens

– É extremamente eficiente para ordenar arquivos de dados;

– Necessita de apenas uma pequena pilha como memória auxiliar;

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

Page 17: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Desvantagens

‒ Tem um pior caso O(n²) comparações.

‒ Sua implementação é muito delicada e difícil:‒ Um pequeno engano pode levar a efeitos inesperados

para algumas entradas de dados.

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

Page 18: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção

Atividade

• Implementar o Quick sort convencional, usando amediana e a média, na escolha do pivô;

Page 19: Ordenação Interna - sistemas.riopomba.ifsudestemg.edu.br · –Ordenação in-place, requer um número de memória fora da estrutura de dados. Seguir Cap4 - Ordenação - Seção