l

Contenido Pág.
INTRODUCCIÓN ........................................................................................................................ 1
OBJETIVOS ................................................................................................................................. 2
Tiempo que le toma a cada programa en ejecutar una cierta cantidad de elementos .................... 3
COMO FUNCIONA EL MÉTODO SHELLSORT ...................................................................... 4
CONCEPTOS BÁSICOS .............................................................................................................. 5
¿Qué significa ordenar? ................................................................................................................. 5
¿Cuál es el propósito de un ordenamiento? ................................................................................... 5
¿Cuántos tipos de ordenamientos existen? .................................................................................... 5
¿Cuándo conviene usar un método de ordenamiento? .................................................................. 5
¿Qué es ordenar un grupo de datos? .............................................................................................. 5
MÉTODO DE ORDENAMIENTO SHELLSORT ....................................................................... 6
EJERCICIO DEL METODO DE ORDENAMIENTO <<SHELLSORT>> ................................ 6
EXPLICACIÓN DEL ALGORITMO DEL MÉTODO DE ORDENAMIENTO
<<SHELLSORT>> ....................................................................................................................... 8
PSEUDOCÓDIGO DEL METODO DE ORDENAMIENTO << SHELLSORT>> ................... 9
Tiempo de ejecución: .................................................................................................................... 9
Ventajas: ........................................................................................................................................ 9
Desventajas: .................................................................................................................................. 9
CÓDIGO EN C++ ....................................................................................................................... 10
CONCLUSIONES ...................................................................................................................... 11
RECOMENDACIONES ............................................................................................................. 11
BIBLIOGRAFÍA ......................................................................................................................... 12

1
INTRODUCCIÓN

El estudio de algoritmos de ordenamiento tiene una gran importancia dentro de la
ciencia de la Computación, pues una buena cantidad de los procesos realizados por
medios computacionales requieren que sus datos estén ordenados. Además, el hecho de
almacenar los datos de manera ordenada permite implementar algoritmos de búsqueda
muy rápidos (por ejemplo: búsqueda binaria). Esta y muchas otras razones de fin
práctico impulsaron el estudio y la búsqueda de algoritmos de ordenamiento eficientes.

Desde los comienzos del uso de computadores se conocían algoritmos que resolvían el
problema en tiempo cuadrático respecto del tamaño del problema, pero eran rutinas muy
sencillas y lentas.

El algoritmo de ordenamiento ShellSort debe su nombre al ingeniero y matemático
estadounidense Donald Shell.














2
OBJETIVOS

 Mostrar cómo funciona el método de ordenamiento ShellSort mediante datos y
ejemplos.

 Dar a conocer algunos conceptos básicos, necesarios para realizar un
ordenamiento.

 Explicar el uso del algoritmo del método de ordenamiento ShellSort.

 Implementar el algoritmo de ordenamiento ShellSort, tanto en pseudocódigo
como en C ++

 Dar a conocer la función que cumplen los intervalos decrecientes de este
algoritmo.

 Dar a conocer el tiempo que toma cada programa en ordenar una serie de
elementos, mediante una explicación y un gráfico para una mejor comprensión.












3
TIEMPO QUE LE TOMA A CADA PROGRAMA EN EJECUTAR UNA
CIERTA CANTIDAD DE ELEMENTOS

Existen una infinidad de métodos de ordenamiento, algunos son simples e intuitivos,
como el bubble sort, y otros como son extremadamente complicados, pero producen los
resultados mucho más rápido.
Entre los algoritmos de ordenamiento más comunes están los siguientes: Bubble sort,
Heap sort, Insertion sort, Merge sort, Quick sort, Selection sort y Shell sort.

En el gráfico siguiente se puede ver el tiempo de ejecución del algoritmo en función de
la cantidad de elementos, se puede observar que si los elementos a ordenar son pocos,
menos de 1000 casi todos los tienen el mismo tiempo de respuesta, pero si la cantidad
de datos aumenta los tiempos de respuesta van cambiando drásticamente entre cada uno
de los ellos, y para una cantidad de datos de 8000 ya se puede determinar que el peor
algoritmo es el bubble sort, mientras que el mejor es el Heap sort.

[s]







[Elementos]


4
COMO FUNCIONA EL MÉTODO SHELLSORT

Es una mejora del método de inserción directa, utilizado cuando el array tiene un gran
número de elementos. En este método no se compara a cada elemento con el de su
izquierda, como en el de inserción, sino con el que está a un cierto número de lugares
(llamado salto) a su izquierda. Este salto es constante, y su valor inicial es n/2 siendo n
el número de elementos, y siendo división entera). Se van dando pasadas hasta que en
una pasada no se intercambie ningún elemento de sitio. Entonces el salto se reduce a la
mitad, y se vuelven a dar pasadas hasta que no se intercambie ningún elemento, y así
sucesivamente hasta que el salto vale 1.
Primeramente vamos a ordenar de menor a mayor.
En este método existe un número llamado PIVOTE que se tomara como referencia para
realizar las respectivas comparaciones.
Y de esta manera ordenar los números de forma secuencial y ordenada.














5
CONCEPTOS BÁSICOS

¿QUÉ SI GNI FI CA ORDENAR?
Significa permutar elementos de tal forma que los mismos queden de acuerdo con una
distribución preestablecida (ascendente o descendente).
¿CUÁL ES EL PROPÓSI TO DE UN ORDENAMI ENTO?
El propósito principal de un ordenamiento es el de facilitar las búsquedas de los
miembros del conjunto ordenado.
¿CUÁNTOS TI POS DE ORDENAMI ENTOS EXI STEN?
Existen 2 tipos: los internos y los externos.
Los internos son aquellos en los que los valores a ordenar están en memoria principal.
Los externos son aquellos en los que los valores a ordenar están en memoria secundaria
(disco, cinta, cilindro magnético, etc.)
¿CUÁNDO CONVI ENE USAR UN MÉTODO DE ORDENAMI ENTO?
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el
factor tiempo.
¿QUÉ ES ORDENAR UN GRUPO DE DATOS?
Significa mover los datos o sus referencias para que queden en una secuencia tal que
represente un orden, el cual puede ser numérico, alfabético o incluso alfanumérico,
ascendente o descendente.




6
MÉTODO DE ORDENAMIENTO SHELLSORT
El método de ordenamiento ShellSort consiste en dividir la serie en partes para poder
realizar las comparaciones.
Para calcular los saltos se divide el número total de elementos de la serie para 2,
n=5/2
n=2,5 como tenemos que tomar el número entero
entonces sería el 2, que sería la cantidad de saltos de nuestra serie.

EJ ERCI CI O DEL MÉTODO DE ORDENAMI ENTO <<SHELLSORT>>
Ordenar la siguiente serie de menor a mayor

PIVOTE

4 2 3 1 5
comparaciones
4>3 si; entonces hay cambio, el 3 toma la posición del 4 y el número 4 toma la posición
del 3
3 2 4 1 5
4>5 no; entonces se mantiene la serie, no hay cambios.
3 2 4 1 5
2>1 si; entonces se realiza un cambio
3 1 4 2 5
Como ya no hay más números para ordenar de dos en dos, tomamos el resultado
anterior y lo dividimos para 2.

n=2/2
n=1, que sería mi nuevo número de saltos




7
3 1 4 2 5
comparamos
3>1 si; entonces se realiza un cambio
1 3 4 2 5
3>4 no; entonces no hay cambio
4>2 si ; entonces se realiza un cambio
1 3 2 4 5
1>3 no; entonces no hay cambio
3>2 si; entonces se realiza un cambio

1 2 3 4 5

Bien ya estaría ordenada nuestra serie de manera ascendente.
1 2 3 4 5














8
EXPLICACIÓN DEL ALGORITMO DEL MÉTODO DE ORDENAMIENTO
<<SHELLSORT>>
Ordenamiento por intervalos decrecientes, nombrado así debido a su inventor Donald
Shell, este algoritmo ordena subgrupos de elementos separados k unidades respecto de
su posición en el arreglo. El valor de k es llamado intervalo. Después de que los
primeros k subgrupos fueron ordenados generalmente utilizando inserción directa, se
escoge un nuevo valor de k más pequeño, y el arreglo es de nuevo partido entre el nuevo
conjunto de subgrupos. Cada uno de los subgrupos mayores es ordenado y el proceso se
repite de nuevo con un valor más pequeño de k.
Cuando el incremento toma un valor de 1, todos los elementos pasan a formar parte del
subgrupo y se aplica inserción directa. El método se basa en tomar como salto al
principio N/2, siendo N el número de elementos, y luego se va reduciendo a la mitad en
cada repetición hasta lograr un valor de 1.















9
PSEUDOCÓDIGO DEL METODO DE ORDENAMIENTO << SHELLSORT>>
ALGORITMO SHELL
INICIO
ENTERO INTERVALO, K, J, I, AUX
INTERVALO N DIV 2
MIENTRAS (INTERVALO > 0)
{
PARA{I INTERVALO – 1, HASTA N, I I + 1)
{
J I – INTERVALO
MIENTRAS(J >= 0)
{
K J + INTERVALO
SI (VECTOR[K] <= VECTOR[J])
{
AUX VECTOR[J]
VECTOR[J] VECTOR[K]
VECTOR[K] AUX
}
SI NO
{
J 0
}
J J – INTERVALO
}
}
INTERVALO INTERVALO DIV 2
}
}
TI EMPO DE EJ ECUCI ÓN:
El bucle externo se ejecutará, el redondeo de (

) veces, el interno n veces, luego el
bucle más interno depende de j j O(n) la constante j se absorbe, luego tenemos
O(

) () (

)
VENTAJ AS:
 No requiere memoria adicional.
 Mejor rendimiento que el método de Inserción clásico.
DESVENTAJ AS:
 Implementación algo confusa.
 Realiza numerosas comparaciones e intercambios.



10

CÓDIGO EN C++

Void Shell(void)
{
Int intervalo, k, j, i, aux;
Intervalo – RANGO / 2;
While(intervalo > 0)
{
for(i = intervalo – 1; i < RANGO; i++)
{
J = i – inervalo;
While(j >= 0)
{
K = j + intervalo;
if(vector[k] <= vector [j])
{
aux = vector[j];
vector[j] = vector[k];
vector[k] = aux;
}
else
j = 0;
j = j – intervalo;
ver_valores(vector);
}
}
intervalo = intervalo /2;
}
}










11

CONCLUSI ONES

 La eficiencia de los distintos algoritmos de ordenamiento puede compararse
utilizando datos empíricos, dado que la velocidad de un proceso de
ordenamiento varía enormemente según las características del conjunto de datos
a ordenar, para obtener resultados empíricos precisos se debe realizar un gran
número de ejecuciones de cada algoritmo sobre conjuntos de datos aleatorios, y
luego, promediar los tiempos de ejecución para obtener una idea fiel del
rendimiento.

 El tiempo que requiere este algoritmo depende siempre de qué sucesión de
incrementos se use. No requiere memoria adicional.


 Su complejidad es difícil de calcular y depende mucho de la secuencia de
incrementos que utilice.

RECOMENDACI ONES

 Al trabajar en el diseño de un algoritmo es fundamental tener en cuenta dos
factores:
Tiempo de procesamiento y espacio de memoria ocupada.

 No usar una cantidad excesiva de números a ordenar ya que tomaría mucho
tiempo en el cálculo de la misma.

 Buscar un método de ordenamiento de acuerdo a sus necesidades para una mejor
eficiencia en el ordenamiento y procesamiento de la misma, y de esta manera
ahorrar tiempo.




12

BI BLI OGRAFÍ A

 Valencia. (2011), método de ordenamiento ShellSort, universidad de Argentina
John F. Kennedy, editorial planeta.

 Sintes. (2010), comparativa de ordenamiento ShellSort, universidad Tecnológica
de Pereira, editorial de chicago.

 López. (2014). Análisis de algoritmos de ordenamiento y selección, recuperado
el: 3, julio, 2014. URL
http://eisc.univalle.edu.co/materias/FADA/clases/ordenamiento1.pdf

 Barrientos. (2012), Análisis programación de ShellSort, recuperado el: 3, julio,
2014. URL
http://latecladeescape.com/t/Ordenaci%C3%B3n+por+el+m%C3%A9todo+de+
Shell+(ShellSort)