Shellsort: Algoritmo de Ordenação Quadrático por Segmentação
1. Shellsort
• Criado por Donald Shell em 1959, Shell sort é o mais eficiente
algoritmo de classificação dentre os de complexidade
quadrática. 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.
• Este método explora o fato de que o método da inserção direta
apresenta desempenho aceitável quando o número de chaves é
pequeno e/ou estas já possuem uma ordenação parcial. Ele
difere do método da inserção direta pelo fato de que ao invés
de considerar apenas um segmento classificado e nele inserir
ordenadamente todos os demais elementos, vários segmentos
são considerados inicialmente, senda cada elemento inserido
seletivamente em um deles.
2. • Num primeiro passo, para um h inicial, os segmentos
assim formados são então classificados por inserção
direta.
• Num segundo passo, o incremento h é diminuído (a
metade do valor anterior), dando origem a novos
segmentos, os quais também serão classificados por
inserção direta.
• Este processo se repete até que h seja igual a 1. Quando
for feita a classificação com h = 1, o vetor estará todo
ordenado.
• Passo 1 – para um certo h inicial, os segmentos assim formados são
classificados por inserção direta.
• Passo 2 – o incremento h é diminuído, dando origem a novos
segmentos, os quais também serão classificados por inserção direta.
• O processo se repete até que h=1, quando for feita a classificação
para este h, o vetor estará classificado.
3. Utilização
• Por ter uma implementação pequena que requer poucas linhas de
códigos e por ser um método eficiente, pode ser utilizado em
sistemas que não dispõe de muitos recursos de memória.
• O seu tempo de execução é sensível à ordem inicial do programa, o
que lhe garante um bom uso em seqüências já ordenadas. (herdado
do método de inserção)
• O seu sistema não é estável, pois ele pode realizar troca de
elementos de igual valor.
Vantagens:
• Shellsort é uma ótima opção para arquivos de tamanho moderado.
• Sua implementação é simples e requer uma quantidade de código
pequena.
Desvantagens:
• O tempo de execução do algoritmo é sensível à ordem inicial do
arquivo.
• O método não é estável.