La ordenación de Shell pertenece a los métodos de clasificación avanzados, nombrado así en honor del ingeniero y matemático estadounidense Donald Shell que la propuso en 1959.
Este método utiliza una segmentación entre los datos. Funciona comparando elementos que estén distantes; la distancia entre comparaciones decrece conforme el algoritmo se ejecuta hasta la ultima fase, en la cual se comparan los elementos adyacentes, por esta razón se le llama ordenación por disminución de incrementos.
La ordenación de Shell usa una secuencia, h1, h2, . . ., ht, conocida como la secuencia de incrementos. Al principio de todo proceso, se fija una secuencia decreciente de incrementos. Cualquier secuencia funcionará en tanto que empiece con un incremento grande, pero menor al tamaño del arreglo de los datos a ordenar, y que el último valor de dicha secuencia sea 1.
Una elección muy común (pero no tan eficiente) para la secuencia de incrementos es adoptar la secuencia sugerida por Shell: h1 = 1, hn+1 = 3hn+1 .
En la siguiente animación - debido al pequeño tamaño del vector - elegí h1=1, h2=2, h3=3, h4=4, h5=6. Esta es la secuencia de Vaughan Pratt en 1971.
Les codes présentés ci-dessus ne sont pas les plus orthodoxes... Mais ils conviennent bien pour l'explication de l'algorithme. Vous trouverez des implémentations plus classiques sur rosettacode.org
Use este algoritmo para resolver el pequeño conjunto de la página anterior :
La complejidad depende de la secuencia de incrementos. Las siguientes tablas muestran la complejidad en términos de diferentes intervalos. N indica el número de elementos a ordenar , k el número de orden en la secuancia.
La aplicación Javascript a continuación evalúa el número de intercambios y comparaciones requeridas para el algoritmo. Elija el modo de generación de la secuencia de incrementos, el color de la curva y haga clic en "buscar". Hasta seis curvas se pueden visualizar en el mismo gráfico. Evaluación de la complejidad de la ordenación de Shell