Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
R
omulo Condori Bustincio
rcondorib@gmail.com
School of Computer Science UNSA
Abstract
En el presente trabajo, se hace un an
alisis al algoritmo de ordenamiento ShellSort de manera teorica y
pr
actica.
Keywords: Algoritmo, Shell, relaci
on de orden, registro
1. Breve Historia
El algoritmo shellsort fue propuesto por Donald Shell en 1959 en su artculo A High-Speed Sorting
Procedure[1]. se presenta como una soluci
on de ordenar elementos con una longitud larga y tomando encuenta
las limitaciones de procesamiento de dicha epoca, en dicho artculo, se discute sobre los metodos interos de
ordenamiento:
1. Encontrar el menor
2. Intercambiar pares
3. Cernido
4. Ordenamiento Parcial
5. Mezclando Pares
6. Ordenar Reales
menciona adem as, los 4 primeros metodos requieren un tiempo proporcional a n2 , donde n es el n
umero de
elementos a ordenar. los metodos siguientes son proporcionales a n(log n) y n(log r) respectivamente, donde
r es el mayor numero de que se utilizar
a en una clave [1].
dichos metodos siguen formando parte de los algoritmos de ordenamiento actuales, pero con variaciones
que permiten eficiencia, ello de la mano del poder de procesamiento actual. [2] [3]
2. El m
etodo de Shell
Shell propone en su trabajo utilizar algunas propiedades de la mezcla con alguna de las propiedades de
cernido [1]. Un algoritmo de ordenamiento que nueve items solo una posicion a la vez tendra un tiempo
promedio propocional a n2 , y cada registro debe de viajar en promedio 13 n posiciones durante el proceso de
ordenamiento por tanto si se desea mejorar sobre estrategias de insercion, se requiere de un mecanismo en
que los registros pueden dar saltos largos en lugar de pasos cortos.
2.1. Explicaci
on intuitiva de ShellSort
Primero dividimos los 16 registros en en 8 grupos (R1 , R9 ), (R2 , R1 0), . . . , (R8 , R1 6)
Ordenando cada grupo de registros obtenidos en la primera parte de manera separada, pasamos a la
segunda fila de la figura 1, esto es llamado la primera pasada.
Notemos que 154 ha cambiado de lugar con 512; 908 y 897, ahora procedemos a dividir los registros
en 4 grupos siendo estos los siguientes (R1 , R5 , R9 , R13 ), . . . , (R4 , R8 , R12 , R16 ), y otra vez cada grupo
es ordenado separadamente, esta es la segunda pasada.
Una tercera pasada ordena 2 grupos de 8, y una cuarta pasada completa el trabajo ordenando los 16
registros.
Shell Sort es tambien conocido como Ordenamiento de incremento menguante, tal que cada pasada
es definido por un incremento h que ordena los registros con salto de h unidades[3].
3. Definici
on formal de Shellsort
3.1. Entrada
Shellsort requiere una manera de comparar, matematicamente requiere de una relacion de orden, as que
los datos que ingresen deber
an de cumplir dicha condicion.
3.2. Salida
Un arreglo ordenado de elementos.
3.3. Pseudoc
odigo
ShellSort(v, n)// Shell sort (Knuth, Vol. 3, pg. 84)
{
for (int gap=n/2; 0<gap; gap/=2)
for (int i=gap; i<n; i++)
for (int j=i-gap; 0<=j; j-=gap)
if (v[j+gap]<v[j]) // swap v[j] and v[j+gap]
swap(v[j+gap],v[j]);
2
4. An
alisis de Shellsort
Utilizando c++, se ha implementado la funcion sort basada en shellsort, y un procedimiento para calcular
el tiempo de demora tal como muestra las fifuras siguientes:
Figure 2: Implementaci
on de Shellsort en C++
Figure 3: C
alculo del tiempo de demorar en C++
3
Figure 4: C
alculo del tiempo de demorar en C++
4
Figure 5: Grafico Peor Caso
5
Figure 6: Grafico Mejor caso
6
Figure 7: Grafico Caso Medio
5. Optimizaciones
Las optimizaciones realizadas a Shellsort, implica escoger saltos adecuados, para el presente tranjo se ha
usado el saldo de n/2, el cu
al tiene un comportamiento cuadratico en todos los casos.
7
References
[1] D. L. Shell, A high-speed sorting procedure, Commun. ACM 2 (7) (1959) 3032. doi:10.1145/368370.368387.
URL http://doi.acm.org/10.1145/368370.368387
[2] B. Brejov
a, Analyzing variants of shellsort, Inf. Process. Lett. 79 (5) (2001) 223227. doi:10.1016/S0020-0190(00)00223-4.
URL http://dx.doi.org/10.1016/S0020-0190(00)00223-4
[3] D. E. Knuth, The Art of Computer Programming, Volume 3: (2Nd Ed.) Sorting and Searching, Addison Wesley Longman
Publishing Co., Inc., Redwood City, CA, USA, 1998.