Sei sulla pagina 1di 8

Shellsort un analisis teorico y practico

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)

Email address: rcondorib@gmail.com (R


omulo Condori Bustincio)

Preprint submitted to Nuclear Physics B May 16, 2017


Figure 1: ShellSort con incrementos 8, 4, 2, 1,imagen tomada de [3]

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++

Se utiliza la siguiente funci


on para el c
alculo del tiempo de demora:

Figure 3: C
alculo del tiempo de demorar en C++

Al ejecutar la siguiente secci


on de c
odigo se obtiene los siguientes resultados tante en el peor caso, caso
medio y mejor caso:

3
Figure 4: C
alculo del tiempo de demorar en C++

4.1. Peor Caso


Ejecutando el programa en c++, se obtiene la siguiente tabla:
n tiempo
100 0.00009435
200 0.00040709
300 0.00090567
400 0.00134336
500 0.0019163
600 0.00339604
700 0.00430918
800 0.00510233
900 0.00641975
1000 0.00758793
1100 0.0114008
1200 0.0134979
1300 0.0152276
1400 0.0177427
1500 0.0199535
1600 0.0202175
1700 0.0222452
1800 0.0246592
1900 0.0284505
2000 0.0307097
Donde n es el tamano del vector a ordenar, y el tiempo en segundos, usando la tabla anterior, obtenemos la
siguiente gr
afica:

4
Figure 5: Grafico Peor Caso

4.2. Mejor Caso


Ejecutando el programa en c++, se obtiene la siguiente tabla:
n tiempo
100 0.00009896
200 0.00038045
300 0.00091607
400 0.00134382
500 0.00202958
600 0.00346389
700 0.00449284
800 0.00513357
900 0.00642299
1000 0.00771234
1100 0.0116297
1200 0.0135539
1300 0.0153496
1400 0.0177572
1500 0.0203085
1600 0.020411
1700 0.0229441
1800 0.0253369
1900 0.0277198
2000 0.0305644
Donde n es el tamano del vector a ordenar, y el tiempo en segundos, usando la tabla anterior, obtenemos la
siguiente gr
afica:

5
Figure 6: Grafico Mejor caso

4.3. Caso Medio


Ejecutando el programa en c++, se obtiene la siguiente tabla:
n tiempo
100 0.00012926
200 0.00041364
300 0.00096477
400 0.00142114
500 0.00203895
600 0.00352941
700 0.00485127
800 0.00533735
900 0.00650028
1000 0.00794496
1100 0.0117046
1200 0.0139518
1300 0.0158625
1400 0.0182901
1500 0.0207814
1600 0.0210235
1700 0.024017
1800 0.0260218
1900 0.0290885
2000 0.0318406
Donde n es el tamano del vector a ordenar, y el tiempo en segundos, usando la tabla anterior, obtenemos la
siguiente gr
afica:

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.

Figure 8: Grafico Caso Medio

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.

Potrebbero piacerti anche