0% encontró este documento útil (0 votos)
80 vistas16 páginas

Algoritmo Shell Sort

PRESENTACION DE ALGORITMO SHELL SORT

Cargado por

202214240i
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
80 vistas16 páginas

Algoritmo Shell Sort

PRESENTACION DE ALGORITMO SHELL SORT

Cargado por

202214240i
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

Universidad Tecnológica de los Andes

Escuela Profesional Ingeniería de Sistemas e


Informática

Trabajo de investigación formativa


ALGORITMOS Y PROGRAMACIÓN II

Algoritmo Shell sort

Presentado por:
Merma Gordillo Abdiel Jimmy Antony.

Aranda Chávez Smith Anthony

Pinares Huamani Melissa

CUSCO – PERU

2024
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Contenido
Introducción .................................................................................................................... 3
Desarrollo del tema ......................................................................................................... 4
1.0 Fundamento Teórico del Algoritmo Shell Sort .................................................. 4
1.1 Origen y Contexto Histórico del Método de Shell Sort ..................................... 4
1.2 Explicación Detallada del Algoritmo Shell Sort ................................................ 4
1.3 Explicación de como funciona el algoritmo shell short. ....................................... 5
1.4 Comparación con Otros Algoritmos de Ordenamiento .................................... 6
1.5 Shell Sort en Estrategias de Optimización ............................................................ 8
Ejemplo Desarrollado del Algoritmo Shell Sort ...................................................... 9
Codificación y ejecución del programa (Python) ................................................... 12
1.6Ventajas y Desventajas del Algoritmo Shell Sort ............................................. 13
CONCLUSION ............................................................................................................. 15
BIBLIOGRAFIA .......................................................................................................... 16
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Introducción

En la era digital actual, el manejo eficiente de datos es fundamental para el desarrollo de


software y sistemas informáticos. Los algoritmos de ordenamiento juegan un papel
crucial en la optimización del rendimiento de diversas aplicaciones, desde bases de
datos hasta interfaces de usuario, donde la presentación ordenada de información es
esencial. La capacidad de ordenar datos de manera rápida y eficiente no solo mejora la
experiencia del usuario, sino que también influye en la eficiencia general del sistema.

Dentro de este contexto, el Shell Sort se presenta como un algoritmo de ordenamiento


significativo que mejora el método tradicional de inserción directa, este algoritmo
utiliza una técnica innovadora que permite realizar comparaciones y desplazamientos
entre elementos a distancias mayores inicialmente, y luego reduce progresivamente esos
intervalos. Esta metodología no solo acelera el proceso de ordenamiento, sino que
también lo hace más eficiente para listas parcialmente ordenadas.

El propósito de esta monografía es ofrecer un análisis exhaustivo del algoritmo Shell


Sort, explorando su funcionamiento, ventajas y desventajas, así como su relevancia en
comparación con otros algoritmos de ordenamiento.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Desarrollo del tema

1.0 Fundamento Teórico del Algoritmo Shell Sort

El Shell Sort, que en español significa ordenación de cáscaras, es un algoritmo de


ordenamiento propuesto por Donald Shell en 1959. Este algoritmo optimiza el proceso
de inserción directa al realizar comparaciones y desplazamientos de elementos a
distancias más amplias inicialmente, y luego reduce progresivamente el intervalo de
comparación. Esto agiliza el movimiento de los elementos hacia sus posiciones finales
en el arreglo, resultando en una mejora en la eficiencia del proceso de ordenamiento
(Delgado, 2011).

1.1 Origen y Contexto Histórico del Método de Shell Sort


El Shell Short lleva su nombre en honor a su inventor, Donald Shell. Shell obtuvo su
Ph.D. en Matemáticas de la Universidad de Cincinnati en 1959 y publicó el algoritmo
en las Comunicaciones de la ACM en julio del mismo año (Salinas et al., 2020). En
aquella época, el algoritmo de inserción directa era el método de ordenamiento más
común, pero presentaba una complejidad temporal de O(n2) en el peor caso, lo que lo
hacía ineficiente para conjuntos de datos grandes. El algoritmo Shell ofrecía una mejora
significativa en la eficiencia, logrando una complejidad temporal promedio
de O(nlogn), lo que lo convirtió en una alternativa atractiva para el ordenamiento de
datos.La introducción del Shell Sort marcó un avance importante en la teoría y práctica
del ordenamiento, ya que fue uno de los primeros algoritmos en romper la barrera del
orden cuadrático. Esto permitió a los programadores y científicos de la computación
abordar problemas de ordenamiento más complejos y con conjuntos de datos más
grandes.

1.2 Explicación Detallada del Algoritmo Shell Sort


El algoritmo de Shell Sort funciona en los siguientes pasos:

Inicialización: Se elige una secuencia de intervalos decrecientes, generalmente


comenzando con la mitad del tamaño del arreglo y reduciéndose hasta llegar a 1. Esta
secuencia de intervalos se conoce como la secuencia de Shell.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Iteración: Para cada intervalo en la secuencia de Shell, se realiza una inserción directa
en el subarreglo con ese intervalo. Esto significa que se comparan y se intercambian
elementos que están separados por el intervalo actual.

Reducción del Intervalo: El intervalo se reduce hasta que llega a 1.

Inserción Directa Final: Se realiza una inserción directa final con un intervalo de 1, lo
que garantiza que el arreglo esté completamente ordenado.

Funcionamiento del Algoritmo

El algoritmo Shell Sort se basa en la idea de ordenar elementos que están separados por
un intervalo específico, conocido como "hueco". que se utilizarán para realizar las
comparaciones y desplazamientos. Por ejemplo, podríamos comenzar con un hueco
igual a la mitad del tamaño del arreglo y reducirlo gradualmente hasta llegar a 1.

1.3 Explicación de como funciona el algoritmo shell short.


Entrada
{ 5, 2, 9, 1, 5, 6 }
Paso 1: Definición de Huecos
Comenzamos con un hueco inicial de 3 (la mitad del tamaño del arreglo).
Paso 2: Ordenamiento con Hueco = 3
Comparamos 5 (índice 0) con 1 (índice 3). Como 1 es menor, intercambiamos:
{ 1, 2, 9, 5, 5, 6 }
Comparamos 2 (índice 1) con 5 (índice 4). No hay cambio.
Comparamos 9 (índice 2) con 6 (índice 5). Intercambiamos:
{ 1, 2, 6, 5, 5, 9 }
Paso 3: Reducción del Hueco
Reducimos el hueco a 1.
Paso 4: Ordenamiento con Hueco = 1
Ahora realizamos un ordenamiento por inserción:
Comparar y mover elementos adyacentes:
{ 1, 2, 5, 5, 6, 9 }
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Resultado Final
El arreglo está ahora ordenado:
{ 1, 2, 5, 5, 6, 9 }

1.4 Comparación con Otros Algoritmos de Ordenamiento

El Shell Sort se compara favorablemente con otros algoritmos de ordenamiento en


términos de eficiencia y facilidad de implementación:

Inserción Directa

Mientras que la inserción directa tiene una complejidad temporal de O(n2) en el peor
caso, el Shell Sort tiene una complejidad temporal promedio que puede llegar a
ser O(nlogn). Esto se debe a que el Shell Sort permite mover elementos distantes más
rápidamente hacia sus posiciones correctas mediante comparaciones iniciales entre
elementos separados por un intervalo mayor.El método Shell Sort es una generalización
del ordenamiento por inserción, teniendo en cuenta dos observaciones clave:

• El ordenamiento por inserción es eficiente si la entrada está "casi ordenada".

• El ordenamiento por inserción es ineficiente, en general, porque mueve los


valores solo una posición cada vez.

Burbuja

El algoritmo burbuja compara elementos adyacentes y realiza intercambios, lo que


puede resultar en un gran número de comparaciones e intercambios innecesarios cuando
se trabaja con listas desordenadas. En contraste, el Shell Sort realiza comparaciones
entre elementos distantes inicialmente, lo que reduce significativamente la cantidad
total de movimientos necesarios.

Selección

El Shell Sort es generalmente más eficiente que el ordenamiento por selección, que
también tiene una complejidad temporal de O(n2). El algoritmo de selección implica
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

seleccionar repetidamente el elemento más pequeño (o más grande) de la parte no


ordenada del arreglo y moverlo a la posición correcta. Esto resulta en un gran número
de comparaciones e intercambios, especialmente en arreglos grandes. En contraste, el
Shell Sort permite que los elementos se muevan a posiciones más cercanas a sus lugares
finales mediante comparaciones a mayores distancias, lo que reduce el número total de
movimientos necesarios.

Merge Sort

El Shell Sort es menos eficiente que el ordenamiento por mezcla (Merge Sort), que
tiene una complejidad temporal de O(nlogn) en todos los casos. El ordenamiento por
mezcla divide el arreglo en partes más pequeñas, las ordena y luego las combina, lo que
garantiza un rendimiento consistente y eficiente independientemente de la disposición
inicial de los datos. Sin embargo, el Shell Sort es más fácil de implementar que el
ordenamiento por mezcla, ya que no requiere estructuras adicionales como listas
temporales para la combinación, lo que puede ser una ventaja en términos de
simplicidad y uso de memoria.

Quick Sort

El Shell Sort es menos eficiente que el ordenamiento rápido (Quick Sort), que
también tiene una complejidad temporal promedio de O(nlogn). Quick Sort es conocido
por su excelente rendimiento en la mayoría de los casos y es uno de los algoritmos más
utilizados para el ordenamiento. Sin embargo, el Shell Sort es más fácil de implementar
y puede ser más estable en el peor caso, ya que su peor caso se presenta solo cuando los
datos están ordenados en forma inversa.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

1.5 Shell Sort en Estrategias de Optimización

El rendimiento del algoritmo Shell Sort puede verse afectado por diferentes factores
relacionados con el hardware y el entorno de programación:

Optimización para Hardware Específico

Procesadores Antiguos y Modernos:

En procesadores antiguos, donde la velocidad y la eficiencia del acceso a la memoria


son limitadas, el uso de secuencias que reducen rápidamente los gaps puede resultar
en un mejor rendimiento. Esto se debe a que minimizan el número total de
comparaciones necesarias.

En procesadores modernos con arquitecturas avanzadas y cachés optimizados, el


impacto del algoritmo puede ser menos significativo debido a su capacidad para
manejar operaciones más complejas rápidamente. Sin embargo, el Shell Sort sigue
siendo útil para arreglos moderados donde la simplicidad es preferible.

Implementación en Python:

Python permite una implementación "bajo demanda" del algoritmo Shell Sort gracias a
su flexibilidad y facilidad para manipular listas. Sin embargo, su rendimiento puede no
ser tan óptimo como en lenguajes compilados como C o C++, donde se pueden realizar
optimizaciones más profundas.

En Python, el uso de listas y su manejo dinámico puede agregar cierta sobrecarga que
afecta el rendimiento general del algoritmo.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Ejemplo Desarrollado del Algoritmo Shell Sort

ordenar una lista de números enteros que representan las calificaciones de los
estudiantes en un examen
calificaciones = [15, 3, 8, 20, 1, 12, 5, 17, 10, 14]

def shell_sort(array):
n = len(array)

interval = n // 2 # Inicializar el intervalo

while interval > 0:

# Realizar una inserción directa en las sublistas

for i in range(interval, n):

temp = array[i]

j=i

# Mover los elementos que están a 'interval' posiciones atrás

while j >= interval and array[j - interval] > temp:

array[j] = array[j - interval]

j -= interval

array[j] = temp

# Reducir el intervalo

interval //= 2

calificaciones = [15,4, 3, 8, 20, 1, 12, 5, 17, 10, 14]

shell_sort(calificaciones)

print("Calificaciones ordenadas:", calificaciones)


UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Calificaciones = [15, 3, 8, 20, 1, 12, 5, 17, 10, 14]


Paso 1 : Inicialización del Intervalo

• Tamaño del arreglo: La lista tiene 10 elementos.

• Intervalo inicial: Se establece el intervalo inicial como la mitad del tamaño del
arreglo:

h=10/2=5

Paso 2: Ordenamiento por Inserción en Sublistas

• Con un intervalo de 5, comenzamos a ordenar los elementos que están separados


por este intervalo.

Iteración con h=5:

• Sublistas:

• Comparamos y ordenamos los elementos en las posiciones:

• i=5 (valor 12):

• Comparamos con array=15 (no se mueve).

• i=6(valor 5):

• Comparamos con array=3 (se mueve a la posición array).

• i=7 (valor 17):

• Comparamos con array=8 (no se mueve).

• i=8 (valor 10):

• Comparamos con array=20(se mueve a la posición array).

• i=9i(valor 14):

• Comparamos con array=1(no se mueve).

• Arreglo tras la primera iteración:


UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

[15, 3, 8, 20, 1, 12, 5, 17, 10, 14]

Paso 3: Reducción del Intervalo

• Se reduce el intervalo a la mitad:

h=5/2=2

Paso 4: Ordenamiento por Inserción en Sublistas con h=2

• Ahora ordenamos los elementos que están separados por un intervalo de h=2.

Iteración con h=2:

• Sublistas:

• Comparamos y ordenamos los elementos en las posiciones:

• Para i=2 (valor 8), se compara con el elemento en


posición j=i−h=0 (valor 15), y se intercambian.

• Para i=3(valor 20), no se mueve.

• Para i=4 (valor 1), se mueve hacia adelante.

• Para i=5 (valor 12), se compara y no se mueve.

• Continuamos este proceso hasta completar el arreglo.

• Arreglo tras la segunda iteración:

[1, 3, 5, 8, 10, 12, 14, 15, 17, 20]

Paso 5: Reducción del Intervalo

• Se reduce nuevamente el intervalo:

h=2/2=1

Paso 6: Ordenamiento Final por Inserción con h=1

• Finalmente, aplicamos el ordenamiento por inserción normal para asegurar que


todos los elementos estén en su lugar correcto.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Iteración con h=1:

• Aquí simplemente aplicamos el método de inserción directa sobre toda la lista.

• Comparando y moviendo elementos adyacentes cuando es necesario.

Resultado Final

Después de completar todas las iteraciones y aplicar el ordenamiento final:

Calificaciones ordenadas: [1, 3, 5, 8, 10, 12, 14, 15, 17, 20]

Codificación y ejecución del programa (Python)


UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

1.6 Ventajas y Desventajas del Algoritmo Shell Sort

El algoritmo Shell Sort tiene varias características que lo hacen atractivo en ciertas
situaciones, así como algunas limitaciones que deben considerarse al elegir un método
de ordenamiento. A continuación, se presentan sus ventajas y desventajas:

Ventajas de Shell Sort

1. Eficiencia:

• Shell Sort es más eficiente que el ordenamiento por inserción simple,


especialmente para listas grandes y desordenadas. Con una secuencia de
huecos adecuada, puede alcanzar una complejidad temporal promedio
de O(nlogn), lo que lo hace competitivo con otros algoritmos de
ordenamiento más complejos

2. Adaptabilidad:

• Este algoritmo es particularmente efectivo para listas que ya están casi


ordenadas. En tales casos, su rendimiento puede acercarse a O(n)O(n), lo
que lo convierte en una opción ideal para aplicaciones donde se espera
que los datos estén parcialmente ordenados

3. Simplicidad:

• Shell Sort es relativamente fácil de entender e implementar. Esto lo


convierte en una buena opción para aquellos que están aprendiendo
sobre algoritmos de ordenamiento

4. Uso de Espacio:

• Al ser un algoritmo "in-place", no requiere espacio adicional significativo


para su ejecución, lo que lo hace adecuado para entornos con
limitaciones de memoria

5. Versatilidad:

• Puede ser utilizado en arreglos de diferentes tamaños y tipos de datos, lo


que le otorga una gran versatilidad en diversas aplicaciones prácticas
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

Desventajas de Shell Sort

1. Inestabilidad:

• Shell Sort no es un algoritmo estable, lo que significa que no garantiza


mantener el orden relativo original de los elementos iguales en la salida
ordenada. Esto puede ser un inconveniente en situaciones donde la
estabilidad es importante

2. Dependencia de la Secuencia de Huecos:

• La eficiencia del algoritmo depende en gran medida de la elección de la


secuencia de huecos (gaps). Algunas secuencias pueden resultar en un
rendimiento inconsistente, y la selección óptima puede requerir prueba
y error

3. Rendimiento Variable:

• Aunque puede ser más eficiente que otros métodos en ciertos casos, no
siempre supera a algoritmos más avanzados como QuickSort o
MergeSort, especialmente en listas muy grandes o desordenadas

¿Por Qué Debería Usarse Shell Sort?

Shell Sort es una opción viable para el ordenamiento cuando:

1. Se trabaja con listas medianas a grandes: Su capacidad para manejar


eficientemente listas desordenadas y casi ordenadas lo hace ideal para muchas
aplicaciones prácticas.

2. Se necesita simplicidad en la implementación: Su facilidad de comprensión y


codificación permite a los programadores implementar rápidamente soluciones
sin complicaciones excesivas.

3. Se busca un algoritmo in-place: Si el espacio adicional es una preocupación,


Shell Sort ofrece una solución eficiente sin requerir estructuras adicionales.

4. Los datos son casi ordenados: En escenarios donde se espera que los datos ya
estén parcialmente organizados, Shell Sort puede ofrecer un rendimiento
excepcional.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

CONCLUSION

El algoritmo Shell Sort se presenta como una alternativa eficiente para el


ordenamiento de datos, especialmente en situaciones donde los conjuntos de datos
son medianos o están parcialmente ordenados. Sus ventajas, como la capacidad
de operar in-place y su adaptabilidad a listas casi ordenadas, lo hacen atractivo
para diversas aplicaciones. Además, su simplicidad en la implementación permite
que sea utilizado por programadores de diferentes niveles de experiencia.

Sin embargo, también es importante considerar sus desventajas. La inestabilidad


del algoritmo y su dependencia de la elección de la secuencia de huecos pueden
llevar a un rendimiento inconsistente en comparación con otros algoritmos más
avanzados, como QuickSort o MergeSort.

Aunque Shell Sort puede alcanzar una complejidad temporal promedio


de O(nlogn) con secuencias óptimas, en el peor de los casos puede llegar a O(n2),
lo que limita su eficacia en ciertos escenarios.En términos de optimización, el
rendimiento del Shell Sort se puede mejorar significativamente mediante la
selección cuidadosa de la secuencia de huecos utilizada.

En comparación con otros algoritmos de ordenamiento, Shell Sort se sitúa en un


punto intermedio: es más eficiente que métodos simples como el ordenamiento
por inserción o burbuja, pero menos eficiente que algoritmos más complejos en
todos los casos. Por lo tanto, Shell Sort es una opción válida cuando se busca un
equilibrio entre simplicidad y rendimiento, especialmente en aplicaciones donde
los datos son moderadamente grandes o están parcialmente ordenados.
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES

ING. de sistemas e informática

BIBLIOGRAFIA

1. Bustos, B. (1999). Ordenamiento Shellsort. Departamento de Ciencias de la


Computación, Universidad de Chile.

2. Universidad Don Bosco. (2019). Tema: Métodos de Ordenamiento. Parte 2.


Recuperado de https://www.udb.edu.sv/udb_files/recursos_guias/informatica-
ingenieria/programacion-iv/2019/ii/guia-4.pdf

3. Estudiantes del Instituto Tecnológico de Zacatepec. (n.d.). Cuadro Comparativo


- 5 CUADRO COMPARTIVO I. Recuperado de https://www.studocu.com/es-
mx/document/instituto-tecnologico-de-zacatepec/estructuras-de-datos/51-
cuadro-comparativo/15403076

4. Knuth, D. E. (1998). The Art of Computer Programming: Volume 3: Sorting and


Searching (2nd ed.). Addison-Wesley.

5. Bustos, B. (n.d.). Ordenamiento Shellsort. Departamento de Ciencias de la


Computación, Universidad de Chile.

También podría gustarte