Você está na página 1de 7

SHELLSORT

Explicando como funciona


Criado por Donald Shell em 1959, publicado pela Universidade de
Cincinnati, o Shell Sort é o mais eficiente algoritmo de ordenação
dentre os de complexidade quadrática (não utiliza recursividade).

É um refinamento do método de inserção direta. O algoritmo difere


do método de inserção direta pelo fato de no lugar de considerar o
vetor a ser ordenado como um único segmento, ele considera vários
segmentos sendo aplicado o método de inserção direta em cada um
deles.
Sendo assim, basicamente o algoritmo passa várias vezes pela lista
dividindo o grupo maior em menores. Nos grupos menores é aplicado
o método da ordenação por inserção.

O algoritmo de ShellSort em si não ordena nada, mas aumenta a


eficiência de outros algoritmos de ordenação (como os da inserção e
seleção por exemplo).
•  ShellSort se baseia em uma variável chamada de incremento de
sequência, ou incremento de shell, que é dado por h e ao decorrer da
execução do algoritmo, é decrementada até 1.

• Utilizando o incremento de shell, o algoritmo compara elementos


distantes em um vetor, em vez de comparar os adjacentes.
• O Shellsort divide o seu vetor em várias partes e muitas vezes.
• Funciona assim:
• *a primeira coisa que ele faz é pegar o tamanho dos "pulos" para
montar os vetorzinhos. através desse trecho:
•       [code]do {
•         h = 3 * h + 1;
•      } while ( h < v.length );
• Trabalhando em um vetor de 10 posições:
• 7256310894
• supondo que "h" = 3, então:
• 7 6 0 4, será um pequeno vetor pra ordenar, onde "h" é o tamanho dos pulos para selecionar
o primeiro vetor. (a cada três posições é selecionado primeiro elemento)
• Ordenando esse vetor ficando:
• 0467
• 0254316897
• Repetindo as operações acima só que ao invés de iniciar da posição 0, vai se iniciar da
posição 1, ficando selecionado:
• 0254316897
• ordene-os:
• 0254316897
• Pegando e inciando da posição = 2
• 0254316897
• ordene-os:
• 0214356897
• Dividindo o h por 3, ficando igual a 1 e repita a operação de cima (vou fazer h
= 2 pra explicar melhor)
• Seu vetor se encontra assim:
• 0214356897
• Agora vamos repetir a operação de cima só que h = 2, selecioando:
• 024356897
• ordene-a:
• 024356798
• repita a operação pegando de posição = 1
• 024356798
• ordene-a:
• 024356798
• agora faça denovo só que com h = 1.

Você também pode gostar