![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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022021715/5c61b5f109d3f20b548b48d6/html5/thumbnails/19.jpg)