Dificuldade ★★☆
3 minutos de Leitura 🕒
O Shell Sort é um algoritmo de ordenação por comparação criado por Donald Shell em 1959. O algoritmo é baseado no algoritmo Ordenação por Inserção (Insertion Sort) e funciona da seguinte forma.
Inicialmente, a coleção é dividida em vários subgrupos, de forma que todos os elementos de um subgrupo estejam a um mesmo intervalo h
entre si. Em seguida, cada subgrupo é reordenado, usando o algoritmo de Ordenação por Inserção. Por fim, o valor do intervalo h
é reduzido, novos subgrupos são criados e o processo repetido até que o tamanho do intervalo h
seja de 1
.
h
.h
entre si.h
e repita os Passos 2 e 3 até que o intervalo h
seja maior que 0
.h = n/2ᵏ
, onde n
é o tamanho da coleção e k
é o passo no algoritmo Shell Sort. Essa sequência faz com o algoritmo tenha um desempenho quadrático O(n²)
no pior caso.h = 2ᵏ - 1
, onde k
é o passo no algoritmo Shell Sort. Essa sequência faz com que o algoritmo tenha um desempenho sub-quadrático O(n³⁄₂)
no pior caso.h = (3ᵏ - 1) / 2
, onde k
é o passo no algoritmo Shell Sort. Essa sequência faz com que o algoritmo tenha um desempenho sub-quadrático O(n³⁄₂)
no pior caso.O desempenho no melhor caso para o algoritmo Shell Sort acontece quando a coleção de entrada está parcialmente ordenada. Nesse cenário, o algoritmo tem um custo super-linear de comparações, em função do número de elementos n
na coleção:
O(n log₂ n)
comparaçõesO desempenho no pior caso para o algoritmo Shell Sort acontece quando a coleção de entrada está ordenada de forma inversa. Nesse cenário, o algoritmo tem um custo quadrático de comparações, em função do número de elementos n
na coleção:
O(n²)
comparaçõesVeja o código completo no GitHub.