Está en la página 1de 2

Siempre me ha fascinado el algoritmo de ordenacion de Shell.

Debe su nombre al ingeniero y matemático estadounidense Donald Shell , que lo publicó en la revista Communications of the ACM en 1959. Es un algoritmo de ordenación interna muy sencillo pero muy ingenioso, basado en comparaciones e intercambios, y con unos resultados radicalmente mejores que los que se pueden obtener con el método de la burbuja, el de selección directa o el de inserción directa. Aunque a menudo, es un algoritmo un tanto olvidado por dos motivos: en primer lugar, en los cursos básicos de programación se suele pasar por alto o se pasa "de puntillas" por este algoritmo, dado que su comprensión requiere un cierto esfuerzo y algo de tiempo, y se suele centrar la atención en los tres algoritmos más básicos (burbuja, selección e inserción); y en segundo lugar, el algoritmo QuickSort, desarrollado por Hoare en 1962 puede dar mejores resultados aún que éste, con lo cual, le suele hacer bastante sombra en los temarios de los cursos de programación básicos. Sin embargo, es necesario romper una lanza a favor del algoritmo ShellSort, ya que es el mejor algoritmo de ordenación in-situ... es decir, el mejor de aquellos en los que la cantidad de memoria adicional que necesita -aparte de los propios datos a ordenar, claro está- es constante, sea cual sea la cantidad de datos a ordenar. El algortimo de la burbuja, el de selección directa, el de inserción directa y el de Shell son todos in-situ, y éste último, el de Shell, es el que mejor resultados da, sin ninguna duda de todos ellos y sus posibles variantes. Por supuesto que otros métodos de ordenación, como QuickSort, BinSort, HeapSort o RadixSort pueden pueden superar a ShellSort en cuanto al tiempo de ejecución, pero ninguno de ellos es ya un algoritmo in-situ. En todos ellos es necesario gestionar una cantidad adicional de memoria proporcional al tamaño de los datos a ordenar... pero de ellos hablaremos en otros artículos. En este artículo nos centraremos en ShellSort. Describiremos la idea que subyace detrás del algoritmo, la k-ordenación, e intentaremos llegar de manera intuitiva al código del algorimo. Finalmente, intentaremos hablar de alguna simplificación y optimización del algoritmo. Todo ello, sin meternos en el berenjenal de demostrar su corrección. Intentaremos que en la medida de lo posible no sea demasiado pesado, utilizando ejemplos y animaciones.

Se basa en comparaciones e intercambios. sino todo lo contrario. En cierto modo. etc. No es un algoritmo en-línea..). . Al igual que cualquier otro de ordenación interna (los datos están en memoria principal) podría utilizarse para ordenación externa (en memoria secundaria) siempre y cuando se disponga de acceso aleatorio. Bjorn Poonen y Torsten Suel prueban que es posible incluso rebajar aún más esas cotas. con la optimización de Robert Sedgewick se llega a O(n4/3). los resultados son mucho mejores que con la burbuja. conviene tenerlo claro antes de meterse con el de Shell. el tiempo de acceso a un elemento no es constante.. y con la propuesta por Vaughan Pratt se llega al orden de O(n log2n). selección directa o inserción directa... arrays de referencias o punteros. Necesita que el tiempo de acceso a cualquier dato sea constante (es decir. En 1992. pero el algoritmo no fue ideado para eso.. como listas enlazadas. aunque en un caso promedio o en casos típicos comprobados empíricamente. depende de la posición del elemento. No es estable: dados dos elementos que al compararlos sean "iguales" no mantienen necesariamente el orden relativo inicial entre ellos El estudio de su complejidad no es trivial. Ojo a otras estructuras. con lo cual. ya que en ese caso.        Se trata de un algoritmo de ordenación interna. ya hemos comentado algunas de ellas en la introducción.. etc. La implementación original de Shell tiene una complejidad en el peor caso de O(n2). fue ideado para trabajar con arrays. Por ejemplo.. Sin embargo. cuya complejidad en el peor caso también es del orden de O(n2). puede considerarse una ampliación del algortimo de inserción directa.. optimizaciones posteriores han logrado reducir esa cota. Greg Plaxton.CARACTERÍSTICAS Bueno.