Você está na página 1de 13

Introdução à Computação II

5952011

5. Algoritmos de Ordenação

Prof. Renato Tinós

Depto. de Computação e Matemática (FFCLRP/USP)

Introdução à Computação II – 5952011 1


Principais Tópicos

5.1. Ordenação por Inserção


5.2. Ordenação por Seleção
5.3. Método da Bolha
5.4. Ordenação por Fusão
5.5. Heapsort
5.6. Quicksort
5.7. Considerações sobre o Problema de
Ordenação
5.8. Ordenação em Tempo Linear
Introdução à Computação II – 5952011 2
5.7. Considerações Sobe o
Problema de Ordenação
15 Sorting Algorithms in 6 Minutes

https://www.youtube.com/watch?v=kPRA0W1kECg

Introdução à Computação II – 5952011 3


5.7. Considerações Sobe o
Problema de Ordenação
• Análise dos Algoritmos de Ordenação

 Considerando os algoritmos de ordenação vistos, a tabela seguinte mostra a


ordem de grandeza de
 números mínimo (Cmín), médio (Cmed) e máximo (Cmax) de comparações de chaves
 números mínimo (Mmín), médio (Mmed) e máximo (Mmax) de movimentos de chaves.

Algoritmo Cmín Cméd Cmáx Mmín Mméd Mmáx


Inserção Direta O(N) O(N2) O(N2) O(N) O(N2) O(N2)
Inserção Binária O(N*log2N) O(N*log2N) O(N*log2N) O(N) O(N2) O(N2)
Seleção Direta O(N2) O(N2) O(N2) O(N) O(N) O(N)
Bubblesort O(N2) 2
O(N ) 2
O(N ) O(1) O(N2) O(N2)
Shakersort O(N) O(N2) O(N2) O(1) O(N2) O(N2)
Fusão O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N)
Heapsort O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N) O(N*log2N)
Quicksort O(N*log2N) O(N*log2N) O(N2) O(N*log2N) O(N*log2N) O(N2)

Introdução à Computação II – 5952011 4


Quadro Geral:
5.7. Considerações Sobe o
Comparações Problema de Ordenação
40
45,56,12,43,95,19,8,67
8,12,19,43,45,56,67,95 36
35 95,67,56,45,43,19,12,8 35 35
35
19,12,8,45,43,56,67,95

30
28 28 28 28 28 28 28 28 28
27

25
25 24
23
22
Comparações

20
17
16
15 15
15 14 14
13 13
12 12
11 11

10
7 7

0
Inserção Direta Inserção Binária Seleção Direta Borbulhamento Agitação Fusão Quicksort Heapsort
Introdução à Computação II – 5952011 5
Quadro Geral:
5.7. Considerações Sobe o
Movimentações Problema de Ordenação
90
45,56,12,43,95,19,8,67
84 84
8,12,19,43,45,56,67,95
95,67,56,45,43,19,12,8
80
19,12,8,45,43,56,67,95

70

60 57 58 58

52
Movimentações

49
50
45 45
42
40 38
36 35
32 32 32 32
29
30
25 26
21 21 21 21 21 22
20 18
14
12 12
10

0 0
0
Inserção Direta Inserção Seleção Direta Borbulhamento Agitação Fusão Quicksort Heapsort
Binária
Introdução à Computação II – 5952011 6
5.7. Considerações Sobe o
Problema de Ordenação
• Análise dos Algoritmos de Ordenação
 [Ziviani, 2004]: Tempo total real para ordenar arranjos de registros (os
valores estão normalizados de acordo com o tempo do método que foi mais
rápido) 500 5000 10000 30000
Registros em Inserção Direta 11,3 87 161 -
ordem Seleção 16,2 124 228 -
aleatória ShellSort 1,2 1,6 1,7 2
Heapsort 1,5 1,6 1,6 1,6
Quicksort 1 1 1 1

500 5000 10000 30000


Inserção Direta 1 1 1 1
Registros em Seleção 128 1524 3066 -
ordem ShellSort 3,9 6,8 7,3 8,1
ascendente Heapsort 12,2 20,8 22,4 24,6
Quicksort 4,1 6,3 6,8 7,1

500 5000 10000 30000


Registros em Inserção Direta 40,3 305 575 -
Seleção 29,3 221 417 -
ordem ShellSort 1,5 1,5 1,6 1,6
descendente Heapsort 2,5 2,7 2,7 2,9
Quicksort 1 1 1 1
Introdução à Computação II – 5952011 7
5.7. Considerações Sobe o
Problema de Ordenação
• Análise dos Algoritmos de Ordenação

 [Ziviani, 2004], páginas 116-118.

 Inserção
– Interessante para arquivos com menos de 20 elementos
– Estável
– Implementação simples
– Para arquivos ordenados, é O(n)

 Seleção
– Números de movimentação é O(n)
» Deve ser usado para arquivos com registros grandes
(estruturas com muitos elementos), desde que não exceda
1000 elementos

Introdução à Computação II – 5952011 8


5.7. Considerações Sobe o
Problema de Ordenação
• Análise dos Algoritmos de Ordenação

 [Ziviani, 2004], páginas 116-118.

 Quicksort
– Vantagens
» É o algoritmo mais eficiente para uma grande variedade
de situações
» Tempo O(n log n ) no caso médio
» Fatores constantes (operações primitivas) pequenos,
quando comparado com outros algoritmos O(n log n )
– Desvantagens
» É recursivo, ou seja, utiliza memória adicional
» Seu desempenho de tempo no pior caso é O (n2)
Introdução à Computação II – 5952011 9
5.7. Considerações Sobe o
Problema de Ordenação
• Análise dos Algoritmos de Ordenação

 [Ziviani, 2004], páginas 116-118.

 Heapsort
– Método eficiente, mas cerca de duas vezes mais lento que
o Quicksort
– No entanto, não utiliza memória adicional
– Tempo O(n log n ), qualquer que seja a ordem inicial dos
elementos
» Aplicações que devem ser executadas em tempo
praticamente igual podem utilizar Heapsort

Introdução à Computação II – 5952011 10


5.7. Considerações Sobe o
Problema de Ordenação
• Com que Velocidade podemos ordenar para o caso
geral?

 Qualquer algoritmo de ordenação baseado em


comparações pode ser visto como uma árvore de
decisão, onde

 os nós internos representam uma comparação de chaves


 as arestas indicam o resultado do teste (verdadeiro ou falso) e
 os nós folhas (terminais) representam o resultado final do
processo de ordenação

Introdução à Computação II – 5952011 11


5.7. Considerações Sobe o
Problema de Ordenação
Árvore de Decisão
(3 elementos) a[1] <= a[2] a[1],a[2],a[3]

Sim Não

a[2] <= a[3] a[1],a[2],a[3] a[1] <= a[3] a[2],a[1],a[3]

Sim Não Sim Não


a[1],a[3],a[2] a[2],a[3],a[1]
a[1],a[2],a[3] a[1] <= a[3] a[2],a[1],a[3] a[2] <= a[3]

Sim Não Sim Não

a[1],a[3],a[2] a[3],a[1],a[2] a[2],a[3],a[1] a[3],a[2],a[1]

Introdução à Computação II – 5952011 12


5.7. Considerações Sobe o
Problema de Ordenação
• Com que velocidade podemos ordenar para o caso geral?

 Ordenando N elementos: N! resultados possíveis


 A árvore deve ter N! folhas
 Como uma árvore binária de altura h tem, no máximo, 2h folhas,
sabemos que
 N! ≤ 2h  h  log2(N!)

 Portanto qualquer árvore de decisões que classifica N elementos


distintos tem uma altura mínima log2(N!)

 Sabendo que (pois pelo menos N/2 termos do produto são maiores
que N/2)
 N! = N(N-1)(N-2)...(2)(1)  (N/2)N/2
 Então log2(N!)  (N/2)log2(N/2) = O(N log2 N)

 Ou seja, a melhor complexidade possível, para o caso geral (i.e.,


para qualquer tipo de chave e com qualquer distribuição de
ocorrências) é O( N log2 N ) Introdução à Computação II – 5952011 13

Você também pode gostar