Você está na página 1de 111

Introdução à Computação II

5954006

5. Algoritmos de Ordenação

Prof. Renato Tinós

Local: Depto. de Computação e Matemática


(FFCLRP/USP)
Introdução à Computação II – 5954006 1
5. Algoritmos de Ordenação

5.1. Ordenação por Inserção


5.2. Ordenação por Seleção
5.3. Método da Bolha
5.3.1. Bubblesort
5.3.2. Shakesort
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 – 5954006 2
5.3. Método da Bolha
• Método da Bolha

 Utiliza a permutação entre os registros do conjunto

 Efetuam-se varreduras repetidas sobre o vetor,


deslocando-se, a cada passo, o menor dos elementos do
conjunto que restou para a sua extremidade esquerda

 Se o vetor (conjunto de registros) for considerado do tipo


coluna, os elementos (registros) podem ser comparados
a bolhas em um tanque de água, com densidades
proporcionais ao valor das respectivas chaves
 cada varredura efetuada sobre o vetor resulta na ascensão de
uma bolha para o seu nível apropriado, de acordo com sua
densidade
Introdução à Computação II – 5954006 3
5.3.1. Bubblesort
Exemplo 5.3.1. N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 95
5
a[j]x
fim se 6 19
fim para
fim para
7 8
... 8 67

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


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 95
5
a[j]x
fim se 6 19
fim para
7 8 j -1
fim para
... 8 67 j

Introdução à Computação II – 5954006 5


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 95
5
a[j]x
fim se 6 19 j -1
fim para
fim para
7 8 j
... 8 67

Introdução à Computação II – 5954006 6


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 95
5
a[j]x
fim se 6 8 j -1
fim para
fim para
7 19 j
... 8 67

Introdução à Computação II – 5954006 7


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 95 j -1
5
a[j]x
fim se 6 8 j
fim para
fim para
7 19
... 8 67

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


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 8 j -1
5
a[j]x
fim se 6 95 j
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 9


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43 j -1
a[j-1]a[j] 8
5 j
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

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


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 8 j -1
a[j-1]a[j] 43
5 j
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

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


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 12 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 8 j
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

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


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56
para j  N até j  i , com passo j  j-1 3 8 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12 j
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 13


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 56 j -1
para j  N até j  i , com passo j  j-1 3 8 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 14


5.3.1. Bubblesort
N=8 a

1 45
...
para i  2 até i  N , com passo i  i+1 i 2 8 j -1
para j  N até j  i , com passo j  j-1 3 56 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 15


5.3.1. Bubblesort
N=8 a

1 45 j -1
...
para i  2 até i  N , com passo i  i+1 i 2 8 j
para j  N até j  i , com passo j  j-1 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 16


5.3.1. Bubblesort
N=8 a

1 8 j -1
...
para i  2 até i  N , com passo i  i+1 i 2 45 j
para j  N até j  i , com passo j  j-1 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
fim para
7 19
... 8 67

Introdução à Computação II – 5954006 17


5.3.1. Bubblesort
...
N=8 a
para i  2 até i  N , com passo i  i+1
para j  N até j  i , com passo j  j-1 8
1
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 2 45
a[j-1]a[j]
3 56
a[j]x
fim se 4 12
fim para
fim para 5 43
... 6 95
7 19

Término da primeira passagem (i=2). 8 67


Note que o elemento 8, mais “leve”
(menor valor) encontra-se na
extremidade
superior do vetor (ou extremidade
esquerda se visto na horizontal)

Introdução à Computação II – 5954006 18


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95
fim para
7 19 j -1
fim para
... 8 67 j

Introdução à Computação II – 5954006 19


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 95 j -1
fim para
fim para
7 19 j
... 8 67

Introdução à Computação II – 5954006 20


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43
5
a[j]x
fim se 6 19 j -1
fim para
fim para
7 95 j
... 8 67

Introdução à Computação II – 5954006 21


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 43 j -1
5
a[j]x
fim se 6 19 j
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 22


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12
a[j-1]a[j] 19 j -1
5
a[j]x
fim se 6 43 j
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 23


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12 j -1
a[j-1]a[j] 19
5 j
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 24


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 56 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 12 j
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 25


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45
para j  N até j  i , com passo j  j-1 i 3 12 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 56 j
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 26


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 45 j -1
para j  N até j  i , com passo j  j-1 i 3 12 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 27


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12 j -1
para j  N até j  i , com passo j  j-1 i 3 45 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Introdução à Computação II – 5954006 28


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 i 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
fim para
7 95
... 8 67

Término da segunda passagem (i=3)

Introdução à Computação II – 5954006 29


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
7 95 j -1
fim para
... 8 67 j

Introdução à Computação II – 5954006 30


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43
fim para
7 67 j -1
fim para
... 8 95 j

Introdução à Computação II – 5954006 31


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 56
a[j-1]a[j] 19
5
a[j]x
fim se 6 43 j -1
fim para j
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 32


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 56
a[j-1]a[j] 19 j -1
5
a[j]x
fim se 6 43 j
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 33


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 56 j -1
a[j-1]a[j] 19
5 j
a[j]x
fim se 6 43
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 34


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 19 j -1
a[j-1]a[j] 56
5 j
a[j]x
fim se 6 43
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 35


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 45 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 19 j
a[j-1]a[j] 56
5
a[j]x
fim se 6 43
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 36


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 45 j
a[j-1]a[j] 56
5
a[j]x
fim se 6 43
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 37


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] i 4 45
a[j-1]a[j] 56
5
a[j]x
fim se 6 43
fim para
fim para
7 67
... 8 95

Término da passagem i=4

Introdução à Computação II – 5954006 38


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 45
a[j-1]a[j] 56
i 5
a[j]x
fim se 6 43
fim para
7 67 j -1
fim para
... 8 95 j

Introdução à Computação II – 5954006 39


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 45
a[j-1]a[j] 56
i 5
a[j]x
fim se 6 43 j -1
fim para j
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 40


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 45
a[j-1]a[j] 56 j -1
i 5
a[j]x
fim se 6 43 j
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 41


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 45
a[j-1]a[j] 43 j -1
i 5
a[j]x
fim se 6 56 j
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 42


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 45 j -1
a[j-1]a[j] 43
i 5 j
a[j]x
fim se 6 56
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 43


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43 j -1
a[j-1]a[j] 45
i 5 j
a[j]x
fim se 6 56
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 44


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
i 5
a[j]x
fim se 6 56
fim para
fim para
7 67
... 8 95

Término da passagem i=5

Introdução à Computação II – 5954006 45


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se i 6 56
fim para
7 67 j -1
fim para
... 8 95 j

Introdução à Computação II – 5954006 46


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se i 6 56 j -1
fim para j
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 47


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45 j -1
5
a[j]x
fim se i 6 56 j
fim para
fim para
7 67
... 8 95

Introdução à Computação II – 5954006 48


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se i 6 56
fim para
fim para
7 67
... 8 95

Término da passagem i=6.


Note que não houve permutação
de elementos nesta passagem.

Introdução à Computação II – 5954006 49


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se 6 56
fim para
i 7 67 j -1
fim para
... 8 95 j

Introdução à Computação II – 5954006 50


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se 6 56 j -1
fim para
fim para
i 7 67 j
... 8 95

Introdução à Computação II – 5954006 51


5.3.1. Bubblesort
N=8 a
...
para i  2 até i  N , com passo i  i+1 1 8
para j  N até j  i , com passo j  j-1
2 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 3 19
a[j-1]a[j]
a[j]x 4 43
fim se 5 45
fim para
fim para 6 56
... i 7 67
8 95

Término da passagem i=7.


Note que não houve permutação
de elementos nesta passagem.

Introdução à Computação II – 5954006 52


5.3.1. Bubblesort
N=8 a

1 8
...
para i  2 até i  N , com passo i  i+1 2 12
para j  N até j  i , com passo j  j-1 3 19
se ( a[ j - 1] > a[ j ] )
xa[j-1] 4 43
a[j-1]a[j] 45
5
a[j]x
fim se 6 56
fim para
7 67 j -1
fim para
... i 8 95 j

Introdução à Computação II – 5954006 53


5.3.1. Bubblesort
N=8 a
...
para i  2 até i  N , com passo i  i+1 1 8
para j  N até j  i , com passo j  j-1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1] 3 19
a[j-1]a[j]
a[j]x 4 43
fim se
5 45
fim para
fim para 6 56
...
7 67
i 8 95
Término da passagem i=8.
Note que não houve permutação
de elementos nesta passagem.

Vetor ordenado

Introdução à Computação II – 5954006 54


5.3.1. Bubblesort

• Análise
 Os números C de comparações entre chaves e M
de movimentações entre registros são
N N N
N2  N
C   1   N  i  1   O( N 2 )
i  2 j i i 2 2
3
M mín  0  O(1) M méd  C  O( N 2 ) M máx  3C  O( N 2 )
2

Introdução à Computação II – 5954006 55


5.3.1. Bubblesort
Exercício 5.3.1. Utilizando ordenação por seleção,
obtenha o número de comparações e
movimentações em cada passo para os
seguintes vetores

a) [ 45 56 12 43 95 19 8 67 ]

b) [ 8 12 19 43 45 56 67 95 ]

c) [ 95 67 56 45 43 19 12 8 ]

d) [ 19 12 8 45 43 56 67 95 ]
Introdução à Computação II – 5954006 56
5.3.1. Bubblesort
Exercício 5.3.1. Solução
i Ci Mi 45 56 12 43 95 19 8 67 i Ci Mi 8 12 19 43 45 56 67 95
2 7 18 8 45 56 12 43 95 19 67 2 7 0 8 12 19 43 45 56 67 95
3 6 12 8 12 45 56 19 43 95 67 3 6 0 8 12 19 43 45 56 67 95
4 5 9 8 12 19 45 56 43 67 95 4 5 0 8 12 19 43 45 56 67 95
5 4 6 8 12 19 43 45 56 67 95 5 4 0 8 12 19 43 45 56 67 95
6 3 0 8 12 19 43 45 56 67 95 6 3 0 8 12 19 43 45 56 67 95
7 2 0 8 12 19 43 45 56 67 95 7 2 0 8 12 19 43 45 56 67 95
8 1 0 8 12 19 43 45 56 67 95 8 1 0 8 12 19 43 45 56 67 95
28 45 28 0

i Ci Mi 19 12 8 45 43 56 67 95 i Ci Mi 95 67 56 45 43 19 12 8
2 7 9 8 19 12 43 45 56 67 95 2 7 21 8 95 67 56 45 43 19 12
3 6 3 8 12 19 43 45 56 67 95 3 6 18 8 12 95 67 56 45 43 19
4 5 0 8 12 19 43 45 56 67 95 4 5 15 8 12 19 95 67 56 45 43
5 4 0 8 12 19 43 45 56 67 95 5 4 12 8 12 19 43 95 67 56 45
6 3 0 8 12 19 43 45 56 67 95 6 3 9 8 12 19 43 45 95 67 56
7 2 0 8 12 19 43 45 56 67 95 7 2 6 8 12 19 43 45 56 95 67
8 1 0 8 12 19 43 45 56 67 95 8 1 3 8 12 19 43 45 56 67 95
28 12 28 84

Introdução à Computação II – 5954006 57


5.3.2. Shakesort
• No vetor exemplo, pode-se observar que os três últimos
passos do algoritmo não afetam a ordem dos elementos do
vetor, pois estes já se encontram ordenados
• Uma técnica para melhorar o algoritmo Bubblesort consiste
em manter uma indicação informando se houve ou não a
ocorrência de uma permutação, para determinar
antecipadamente o término do algoritmo
• Entretanto, mesmo essa melhoria pode ser por sua vez
aperfeiçoada, guardando-se não a simples informação da
ocorrência de uma permutação, mas a posição (índice) do
vetor em que ocorreu a última permutação realizada

Introdução à Computação II – 5954006 58


5.3.2. Shakesort
• Assimetria: uma bolha única, colocada de modo incorreto, na
extremidade mais densa do vetor, cujos demais elementos
estejam ordenados, será posicionada corretamente em um
único passo, mas um elemento incorretamente posicionado
na extremidade menos densa irá deslocar-se de apenas uma
posição por vez em direção à sua correta posição. Por
exemplo, o vetor
v = [ 12 19 43 45 56 67 95 8]
• é ordenado pelo método Bubblesort aperfeiçoado em um
único passo, mas o vetor
v = [ 95 8 12 19 43 45 56 67]
• requer sete passos para a sua ordenação.
• Esta assimetria não natural sugere uma terceira melhoria:
alternar a direção dos sucessivos passos de ordenação:
Shakersort (ou Agitação)
Introdução à Computação II – 5954006 59
5.3.2. Shakesort
Exemplo 5.3.2. N=8 a
...
L  2; R  N; k  N ;
1 45
faça 2 56
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 3 12
xa[j-1]
a[j-1]a[j] 4 43
a[j]x
kj 5 95
fim se
6 19
fim para
Lk+1 7 8
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 8 67
xa[j-1]
a[j-1]a[j]
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...
Introdução à Computação II – 5954006 60
5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 45
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) L 2 56
xa[j-1]
a[j-1]a[j] 3 12
a[j]x
kj 4 43
fim se
5 95
fim para
Lk+1 6 19
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 8 j -1
xa[j-1]
a[j-1]a[j] k R 8 67 j
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 61


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 45
1
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) L 2 56
xa[j-1]
a[j-1]a[j] 3 12
a[j]x
kj 4 43
fim se
fim para 5 95
Lk+1 6 19 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 8 j
xa[j-1]
a[j-1]a[j] k R 8 67
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 62


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1] 1 45
a[j-1]a[j]
L 2 56
a[j]x
kj 3 12
fim se
fim para 4 43
Lk+1
para j  L até j  R , com passo j  j+1 5 95
se ( a[ j - 1] > a[ j ] )
xa[j-1] 6 8 j -1
a[j-1]a[j] k 7 19 j
a[j]x
kj R 8 67
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 63


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1] 1 45
a[j-1]a[j]
a[j]x L 2 56
kj
fim se 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1
5 95 j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] 6 8 j
a[j-1]a[j]
a[j]x k 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 64


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] )
N=8 a
xa[j-1]
a[j-1]a[j] 1 45
a[j]x
L 2 56
kj
fim se 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 8 j -1
xa[j-1]
a[j-1]a[j]
k 6 95 j
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 65


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 45
a[j-1]a[j]
a[j]x L 2 56
kj
fim se 3 12
fim para
Lk+1 4 43 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 8 j
xa[j-1] k 6 95
a[j-1]a[j]
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 66


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j] 1 45
a[j]x
kj L 2 56
fim se
fim para 3 12
Lk+1
4 8 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) k 5 43 j
xa[j-1]
a[j-1]a[j] 6 95
a[j]x
kj 7 19
fim se
fim para R 8 67
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 67


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 45
a[j-1]a[j]
a[j]x L 2 56
kj
fim se 3 12 j -1
fim para
Lk+1 4 8 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] )
k 5 43
xa[j-1] 6 95
a[j-1]a[j]
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 68


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j]
1 45
a[j]x
kj L 2 56
fim se
fim para 3 8 j -1
Lk+1
para j  L até j  R , com passo j  j+1 k 4 12 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 5 43
a[j-1]a[j] 95
6
a[j]x
kj 7 19
fim se
fim para R 8 67
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 69


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] N=8 a
a[j-1]a[j]
a[j]x
1 45
kj
fim se L 2 56 j -1
fim para
Lk+1 3 8 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) k 4 12
xa[j-1]
a[j-1]a[j] 5 43
a[j]x 95
6
kj
fim se 7 19
fim para
Rk-1 R 8 67
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 70


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1]
a[j-1]a[j] N=8 a
a[j]x
kj 1 45
fim se j -1
fim para L 2 8
Lk+1 k 3 56 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 4 12
xa[j-1]
a[j-1]a[j] 5 43
a[j]x
kj 6 95
fim se
fim para
7 19
Rk-1 R 8 67
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 71


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] N=8 a
a[j-1]a[j]
a[j]x 1 45 j -1
kj
fim se L 2 8 j
fim para k 3 56
Lk+1
para j  L até j  R , com passo j  j+1 4 12
se ( a[ j - 1] > a[ j ] )
xa[j-1] 5 43
a[j-1]a[j]
a[j]x 6 95
kj
fim se
7 19
fim para R 8 67
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 72


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j] 1 8 j -1
a[j]x
kj
k L 2 45 j
fim se 3 56
fim para
Lk+1 4 12
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 43
xa[j-1]
a[j-1]a[j] 6 95
a[j]x
kj
7 19
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 73


5.3.2. Shakesort

... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) k L 2 45
xa[j-1]
a[j-1]a[j] 3 56
a[j]x
4 12
kj
fim se 5 43
fim para
Lk+1 6 95
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 19
xa[j-1]
a[j-1]a[j] R 8 67
a[j]x
kj
fim se
fim para Término da 1ª “subida”
Rk-1
enquanto ( L ≤ R )
...
Introdução à Computação II – 5954006 74
5.3.2. Shakesort
...
L  2; R  N; k  N ;
N=8 a
faça
para j  R até j  L , com passo j  j -1 1 8
se ( a[ j - 1] > a[ j ] )
xa[j-1]
k 2 45 j -1
a[j-1]a[j] L 3 56 j
a[j]x
kj 4 12
fim se
fim para 5 43
Lk+1
para j  L até j  R , com passo j  j+1 6 95
se ( a[ j - 1] > a[ j ] )
7 19
xa[j-1]
a[j-1]a[j] R 8 67
a[j]x
kj
fim se
fim para
Rk-1 Início da 1ª “descida”
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 75


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 8
a[j-1]a[j]
a[j]x k 2 45
kj
fim se L 3 56 j -1
fim para
Lk+1 4 12 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 43
xa[j-1] 6 95
a[j-1]a[j]
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 76


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j]
1 8
a[j]x
kj 2 45
fim se
fim para L 3 12 j -1
Lk+1
para j  L até j  R , com passo j  j+1 k 4 56 j
se ( a[ j - 1] > a[ j ] )
xa[j-1] 5 43
a[j-1]a[j] 95
6
a[j]x
kj 7 19
fim se
fim para R 8 67
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 77


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 8
a[j-1]a[j]
a[j]x 2 45
kj
fim se L 3 12
fim para
Lk+1 k 4 56 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 43 j
xa[j-1] 6 95
a[j-1]a[j]
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 78


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j] 1 8
a[j]x
kj 2 45
fim se L 3 12
fim para
Lk+1 4 43 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) k 5 56 j
xa[j-1]
a[j-1]a[j] 6 95
a[j]x
kj
7 19
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 79


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 8
a[j-1]a[j]
a[j]x 2 45
kj
fim se L 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1 j -1
se ( a[ j - 1] > a[ j ] ) k 5 56
xa[j-1] 6 95 j
a[j-1]a[j]
a[j]x 7 19
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 80


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1 N=8 a
se ( a[ j - 1] > a[ j ] )
xa[j-1]
1 8
a[j-1]a[j]
a[j]x 2 45
kj
fim se L 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) k 5 56
xa[j-1] 6 95 j -1
a[j-1]a[j]
a[j]x 7 19 j
kj
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 81


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j] 1 8
a[j]x
kj 2 45
fim se L 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 56
xa[j-1]
6 19 j -1
a[j-1]a[j]
a[j]x j
kj
k 7 95
fim se R 8 67
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 82


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) N=8 a
xa[j-1]
a[j-1]a[j] 1 8
a[j]x
kj 2 45
fim se L 3 12
fim para
Lk+1 4 43
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 5 56
xa[j-1]
a[j-1]a[j] 6 19
a[j]x
kj
k 7 95 j -1
fim se R 8 67 j
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 83


5.3.2. Shakesort
...
L  2; R  N; k  N ;
faça
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] )
xa[j-1] N=8 a
a[j-1]a[j]
a[j]x 1 8
kj
fim se 2 45
fim para
Lk+1 L 3 12
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] )
4 43
xa[j-1] 5 56
a[j-1]a[j]
a[j]x 6 19
kj
fim se 7 67 j -1
fim para
Rk-1 k R 8 95 j
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 84


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x
kj 4 43
fim se 5 56
fim para
Lk+1 6 19
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 67
xa[j-1]
a[j-1]a[j] k R 8 95
a[j]x
kj
fim se
Término da 1ª “descida”.
fim para
Rk-1 Término da primeira passagem
enquanto ( L ≤ R ) (subida e descida de bolhas)
...

Introdução à Computação II – 5954006 85


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x
kj 4 43
fim se 5 56
fim para
Lk+1 6 19 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67 j
xa[j-1]
a[j-1]a[j] k 8 95
a[j]x
kj
fim se
fim para Início da 2ª “subida”, pois
Rk-1
L <= R
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 86


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x
kj 4 43
fim se 5 56 j -1
fim para
Lk+1 6 19 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] k 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 87


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x
kj 4 43
fim se 5 19 j -1
fim para
Lk+1 k 6 56 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 88


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x j -1
kj 4 43
fim se 5 19 j
fim para
Lk+1 k 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 89


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1]
a[j-1]a[j] L 3 12
a[j]x j -1
kj 4 19
fim se k 5 43 j
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 90


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45
xa[j-1] j -1
a[j-1]a[j] L 3 12
a[j]x j
kj 4 19
fim se k 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 91


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 45 j -1
xa[j-1]
a[j-1]a[j] L 3 12 j
a[j]x
kj 4 19
fim se k 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 92


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12 j -1
xa[j-1]
a[j-1]a[j] k L 3 45 j
a[j]x
kj 4 19
fim se 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 93


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] k L 3 45
a[j]x
kj 4 19
fim se 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1 Término da 2ª “subida”
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 94


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] k 3 45 j -1
a[j]x j
kj L 4 19
fim se 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1 Início da 2ª “descida”
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 95


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19 j -1
a[j]x j
kj k L 4 45
fim se 5 43
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 96


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj k L 4 45 j -1
fim se 5 43 j
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 97


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj L 4 43 j -1
fim se k 5 45 j
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 98


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj L 4 43
fim se k 5 45 j -1
fim para
Lk+1 6 56 j
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 99


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj L 4 43
fim se k 5 45
fim para
Lk+1 6 56 j -1
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67 j
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 100


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj L 4 43
fim se k 5 45
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) R 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1 Término da 2ª “descida”.
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 101


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj R L 4 43
fim se k 5 45
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para Início da 3ª “subida”, pois
Rk-1
L <= R
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 102


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19 j -1
a[j]x
kj R L 4 43 j
fim se k 5 45
fim para
Lk+1 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1 Término da 3ª “descida”.
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 103


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj R 4 43
fim se k 5 45
fim para
Lk+1 L 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Rk-1 Início da 3ª “descida”.
enquanto ( L ≤ R )
...

Introdução à Computação II – 5954006 104


5.3.2. Shakesort
... N=8 a
L  2; R  N; k  N ;
faça 1 8
para j  R até j  L , com passo j  j -1
se ( a[ j - 1] > a[ j ] ) 2 12
xa[j-1]
a[j-1]a[j] 3 19
a[j]x
kj R 4 43
fim se k 5 45
fim para
Lk+1 L 6 56
para j  L até j  R , com passo j  j+1
se ( a[ j - 1] > a[ j ] ) 7 67
xa[j-1]
a[j-1]a[j] 8 95
a[j]x
kj
fim se
fim para
Término da 3ª “descida”.
Rk-1 Note que o laço de descida não é
enquanto ( L ≤ R ) executado nessa passagem.
... Como L > R, Vetor Ordenado
Introdução à Computação II – 5954006 105
5.3.2. Shakesort

• Análise
 A análise do Shakersort é mais complexa do que dos
algoritmos anteriores
 O número mínimo de comparações é Cmin=N-1
 O número médio de comparações é proporcional a
Cmed=(N2-N(K+ln(N)))/2, onde K é uma constante
 Entretanto, nota-se que todas as melhorias não afetam o
número de movimentações: elas apenas reduzem o
número de testes redundantes
 Como a movimentação de dois elementos é uma
operação mais onerosa do que a comparação de chaves,
estas otimizações operam no algoritmo um ganho menor
do que se poderia esperar
Introdução à Computação II – 5954006 106
5.3.2. Shakesort

• Análise

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


2
Inserção Direta O(N) O(N ) 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) O(N2) O(N2) O(1) O(N2) O(N2)
Shakersort O(N) O(N2) O(N2) O(1) O(N2) O(N2)

Introdução à Computação II – 5954006 107


5.3.2. Shakesort
• Exercício 5.3.2. Utilizando ordenação por
shakesort, obtenha o número de comparações
e movimentações em cada passo para os
seguintes vetores

 [ 45 56 12 43 95 19 8 67 ]

 [ 8 12 19 43 45 56 67 95 ]

 [ 95 67 56 45 43 19 12 8 ]

 [ 19 12 8 45 43 56 67 95 ]
Introdução à Computação II – 5954006 108
5.3.2. Shakesort
Exercício 5.3.2. Solução
L R Ci Mi 45 56 12 43 95 19 8 67 L R Ci Mi 8 12 19 43 45 56 67 95
3 7 13 30 8 45 12 43 56 19 67 95 9 7 7 0 8 12 19 43 45 56 67 95
4 4 9 15 8 12 19 43 45 56 67 95 7 0
6 4 1 0 8 12 19 43 45 56 67 95
23 45

L R Ci Mi 19 12 8 45 43 56 67 95 L R Ci Mi 95 67 56 45 43 19 12 8
3 2 13 12 8 12 19 43 45 56 67 95 3 7 13 39 8 67 56 45 43 19 12 95
13 12 4 6 9 27 8 12 56 45 43 19 67 95
5 5 5 15 8 12 19 45 43 56 67 95
6 4 1 3 8 12 19 43 45 56 67 95
28 84

Introdução à Computação II – 5954006 109


Comparações
40
45,56,12,43,95,19,8,67
8,12,19,43,45,56,67,95
95,67,56,45,43,19,12,8
35 19,12,8,45,43,56,67,95

30

25
Comparações

20

15

10

0
Inserção Direta Inserção Binária Seleção Bublesort Shakesort

Introdução à Computação II – 5954006 110


Movimentações
90
45,56,12,43,95,19,8,67
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
Movimentações

50

40

30

20

10

0
Inserção Direta Inserção Binária Seleção Bublesort Shakesort
Introdução à Computação II – 5954006 111

Você também pode gostar