11
 O algoritmo Shellsort Inventado por Donald Shell em 1959 (daí o nome Shell); Também conhecido como ordenação por diminuição de incrementos; Princípio básico: O algoritmo Shellsort ordena uma seqüencia a 1 ,a 2 ,...,a n de n  elementos pela ordenação de sucessivas subseqüencias cujos valores estão misturados na seqüencia original. As subseqüencias a serem ordenadas são determinadas pela seqüencia de parâmetros h t ,h t1 ,...,h 1 denominados incrementos. Destes, é obrigatório que sempre h 1  = 1. 1. Começando por  h t , divide-se a seqüencia original em h t subseqüencias contendo aproximadamente n/h t  elementos.

Shell Sort

Embed Size (px)

Citation preview

Page 1: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 1/11

 

O algoritmo Shellsort 

Inventado por Donald Shell em 1959 (daí o nome Shell);

Também conhecido como ordenação por diminuição de

incrementos;

Princípio básico: O algoritmo Shellsort ordena uma seqüencia

a1, a2, . . . , an de n elementos pela ordenação de sucessivassubseqüencias cujos valores estão misturados na seqüencia

original.

As subseqüencias a serem ordenadas são determinadas pela

seqüencia de parâmetros ht, ht−1, . . . , h1 denominados

incrementos. Destes, é obrigatório que sempre h1 = 1.

1. Começando por ht, divide-se a seqüencia original em ht

subseqüencias contendo aproximadamente n/ht elementos.

Page 2: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 2/11

 

O algoritmo Shellsort 

Princípio básico (cont.):

Os elementos que iniciam cada subseqüencia são os ht primeiroselementos da seqüencia original e dentro de cada subseqüencia

os elementos distam de ht posições entre si;

2. Estas primeiras subseqüencias são ordenadas utilizando-se

qualquer outro algoritmo de ordenação;

3. Repetem-se os passos 1 e 2 para ht−1, ht−2, . . . , h1, quando

então a seqüencia ficará ordenada.

Page 3: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 3/11

 

O algoritmo Shellsort 

Observações

1. Para ordenar as subseqüencias utiliza-senormalmente o algoritmo de inserção;

2. Testes empíricos sugerem que a melhor escolha

para os valores deh

é a seqüencia3t−1

2, . . . , 13, 4, 1, onde ht = 3ht−1 + 1;

3. t representa o número de subseqüencias aconsiderar, que pode ser expresso em função de n

(número de elementos) como t = log3(2n + 1).

Page 4: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 4/11

 

O algoritmo Shellsort 

Exemplo de aplicação

Considere o exemplo abaixo com hk = 6, 4, 3, 2, 1, para k = 5, . . . , 1. Primeiro,

separamos a seqüencia em 6 subseqüencias de tamanho 2 cada:

7 19 24 13 31 8 82Seqüencia

Original

(h5=6)

18 44 63 5 29

1asublista

(7,82)

2asublista(19,18)

3asublista(24,44)

4asublista(13,63)

5asublista

(31,5)

6asublista

(8,29)

Page 5: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 5/11

 

O algoritmo Shellsort 

Exemplo de aplicação (cont.)

Agora, com as subseqüencias ordenadas do passo anterior, separamos a seqüencia em

4 subseqüencias de tamanho 3 cada:

7 18 24 13 5 8 82(h4=4) 19 44 63 31 29

1asublista

(7,5,44)

2a

sublista

(18,8,63)

3a

sublista

(24,82,

31 )

4a

sublista

(13,19,

29 )

Page 6: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 6/11

O algoritmo Shellsort 

Exemplo de aplicação (cont.)

Das subseqüencias ordenadas do passo anterior, separamos a seqüencia em 3

subseqüencias de tamanho 4 cada:

5 8 24 13 7 18 31(h3=3) 19 44 63 82 29

1a

sublista

(5,13,31,63 )

2a

sublista(8,7,19,

82 )

3a

sublista

(24,18,

44,29)

 

Page 7: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 7/11

O algoritmo Shellsort 

Exemplo de aplicação (cont.)

Das subseqüencias ordenadas do passo anterior, separamos a seqüencia em 2

subseqüencias de tamanho 6 cada:

5 7 18 13 8 24 31(h2=2) 19 29 63 82 44

1a

sublista

(5,18,8,31,29,

82 )

2a

sublista

(7,13,24,

19,63,

44 )

 

Page 8: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 8/11

O algoritmo Shellsort 

Exemplo de aplicação (cont.)

Das subseqüencias ordenadas do passo anterior, separamos a seqüencia em 1

seqüencia de tamanho 12:

5 7 8 13 18 19 29(h1=1) 24 31 44 82 63

1a

sublista(5,7,8,

13,18,

19,29,

24,31,

44,82,

63 )

 

Page 9: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 9/11

O algoritmo Shellsort 

Exemplo de aplicação (cont.)

A ordenação da seqüencia anterior leva a resposta do problema:

5 7 8 13 18 19 24 29 31 44 63 82

Seqüencia ordenada

 

Page 10: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 10/11

O algoritmo Shellsort 

Algoritmo

1 procedimento Shellsort(A,n)2 inicio

3 t←CalcularNumIncrementos(n) {tamanho da seq. h}

4 InicializarIncrementos (h, t ) {det . os valores dos h’s →vetor}

5 para s←t ate 1 faca

6 inicio

7 para i←h[s]+1 ate n faca

8 { inicio a ordenacao da subseq.}9 x←A[i]

10 j←i−h[s]

 

Page 11: Shell Sort

5/9/2018 Shell Sort - slidepdf.com

http://slidepdf.com/reader/full/shell-sort-559bf5adc32a7 11/11

O algoritmo Shellsort 

Algoritmo (cont.)

11 enquanto (j>0) e (A[j]>x) faca12 A[j+h[s]]←A[j]

13 j← j−h[s]

14 fim enquanto

15 A[j+h[s]]←x

16 fim para

17 fim para

18 fim