You are on page 1of 2

El ordenamiento Shell (Shell sort en ingls) es un algoritmo de ordenamiento. El mtodo se denomina Shell en honor de su inventor Donald Shell.

Su implementacin original, requiere O(n2) comparaciones e intercambios en el peor caso. Un cambio menor presentado en el libro de V. Pratt produce una implementacin con un rendimiento de O(n log2 n) en el peor caso. Esto es mejor que las O(n2) comparaciones requeridas por algoritmos simples pero peor que el ptimo O(n log n). Aunque es fcil desarrollar un sentido intuitivo de cmo funciona este algoritmo, es muy difcil analizar su tiempo de ejecucin. El Shell sort es una generalizacin del ordenamiento por insercin, teniendo en cuenta dos observaciones: 1. El ordenamiento por insercin es eficiente si la entrada est "casi ordenada". 2. El ordenamiento por insercin es ineficiente, en general, porque mueve los valores slo una posicin cada vez. El algoritmo Shell sort mejora el ordenamiento por insercin comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos ms grandes" hacia su posicin esperada. Los pasos mltiples sobre los datos se hacen con tamaos de espacio cada vez ms pequeos. El ltimo paso del Shell sort es un simple ordenamiento por insercin, pero para entonces, ya est garantizado que los datos del vector estn casi ordenados

Secuencia de espacios
La secuencia de espacios es una parte integral del algoritmo Shell sort. Cualquier secuencia incremental funcionara siempre que el ltimo elemento sea 1. El algoritmo comienza realizando un ordenamiento por insercin con espacio, siendo el espacio el primer nmero en la secuencia de espacios. Contina para realizar un ordenamiento por insercin con espacio para cada nmero en la secuencia, hasta que termina con un espacio de 1. Cuando el espacio es 1, el ordenamiento por insercin con espacio es simplemente un ordenamiento por insercin ordinario, garantizando que la lista final estar ordenada. La secuencia de espacios que fue originalmente sugerida por Donald Shell deba comenzar con y dividir por la mitad el nmero hasta alcanzar 1. Aunque esta secuencia proporciona mejoras de rendimiento significativas sobre los algoritmos cuadrticos como el ordenamiento por insercin, se puede cambiar ligeramente para disminuir ms el tiempo necesario medio y el del peor caso. El libro de texto de Weiss demuestra que esta secuencia permite un ordenamiento del peor caso, si los datos estn inicialmente en el vector como (pequeo_1, grande_1, pequeo_2, grande_2, ...) - es decir, la mitad alta de los nmeros estn situados, de forma ordenada, en las posiciones con ndice par y la mitad baja de los nmeros estn situados de la misma manera en las posiciones con ndice impar.

Quizs la propiedad ms crucial del Shell sort es que los elementos permanecen kordenados incluso mientras el espacio disminuye. Se dice que un vector dividido en k subvectores esta k-ordenado si cada uno de esos subvectores est ordenado en caso de considerarlo aislado. Por ejemplo, si una lista fue 5-ordenada y despus 3-ordenada, la lista est ahora no slo 3-ordenada, sino tanto 5-ordenada como 3-ordenada. Si esto no fuera cierto, el algoritmo deshara el trabajo que haba hecho en iteraciones previas, y no conseguira un tiempo de ejecucin tan bajo. Dependiendo de la eleccin de la secuencia de espacios, Shell sort tiene un tiempo de ejecucin en el peor caso de (usando los incrementos de Shell que comienzan (usando los

con n/2, n el tamao del vector y se dividen por 2 cada vez), incrementos de Hibbard de Sedgewick ),

(usando los incrementos de

, y posiblemente mejores tiempos de ejecucin no en el peor caso del

comprobados. La existencia de una implementacin Shell sort permanece como una pregunta por resolver.

NOTA: Los incrementos de Sedgewick se calculan intercalando los valores de las siguientes funciones:

You might also like