Top Banner
Integrantes: Sergio Salinas Pablo Corrales Elías Gárate Claudio Saji Profesora: Rosa Barrera Capot
12
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Shell Sort

Integrantes:

Sergio Salinas

Pablo Corrales

Elías Gárate

Claudio Saji

Profesora: Rosa Barrera Capot

Page 2: Shell Sort

Método Shell Sort: Historia

El método se denomina Shell en

honor de su inventor Donald Shell

(nacido el 01 de marzo 1924)

Adquirió su Ph.D. en Matemáticas

de la Universidad de Cincinnati en

1959, y publicó el algoritmo Shell en

las Comunicaciones de la ACM en

julio del mismo año.Creador: Donald Shell

Año de publicación: 1959

Revista: Communications of the ACM.

Page 3: Shell Sort

Se considera que el método Shelles una mejor de los métodos deinserción directa. En el álgoritmode inserción, cada elemento secompara con los elementoscontiguos de su izquierda, unotras otro. Si el elemento a insertares el más pequeño hay querealizar muchas comparacionesantes de colocarlo en su lugardefinitivo. El algoritmo de Shellmodifica los saltos contiguosresultantes de las comparacionespor saltos de mayor tamaño y conello se consigue que la ordenaciónsea más rápida.

Page 4: Shell Sort

Sea el siguiente arreglo

El mismo arreglo desordenado sería:

Luego, hay que considerar un “n” que seríael numero de elementos del arreglo. Eneste caso n=10. Luego se aplica n/2 y eseserá el numero de saltos como lo indica lasiguiente imagen:

Page 5: Shell Sort

Luego, cuando el elemento de la izquierda sea mayor que elde la derecha, se intercambian de posición, en casocontrario, se deja tal cual como está

Luego se vuelve a hacer el mismo procedimiento , ya que hubieron numeros cambiados, recordar que se pasa a n/2 denuevo cuando en ningun salto se requiere cambiar de posicion algun elemnto

Page 6: Shell Sort

Luego, como al analizar los saltos no hay ningun elemento que sea mayor que el otro de izquierda a derecha, el salto “5” se le aplica n/2, lo cual dividido como entero seria 5:2=2 , entonces ahora el valor del salto será 2

Luego intercambiando cuando se cumple la condicion mencionada antes quedaría asi:

Page 7: Shell Sort

Luego, como sí hubieron cambios, entonces se aplica el mismo procedimiento anterior. Luego quedaría así:

Hubo un cambio solamente, por lo cual hay que volver a repetir el proceso.

Finalmente, el arreglo ha quedado ordenado crecientemente.

Page 8: Shell Sort

Características técnicas del algoritmo.

Para arreglos semi ordenados es considerablemente más rápido que otros algoritmos de O(n2) como bubble sort e insert sort. Es 5 veces más rápido que bubble sort y aproximadamente 2 veces más rápido que insert sort.

Como podemos observar en el gráfico, Shell sort aumenta mucho el tiempo que requiere para ordenar los elementos a medida que el número de estos crece. Por lo que se recomienda para un número pequeño o mediano de elementos (Menor a 5000 elementos) debido a la simpleza del algoritmo.

Page 9: Shell Sort

Shell Sort comparado con otros algoritmos de ordenamiento

El algoritmo Shellsort estaría en tercer lugar de acuerdo a este grafico. Shellsort y Mergesort se demoran prácticamente lo mismo en ordenar elementos, la diferencia es que Shellsort no ocupa espacio extra en realizar el ordenamiento, esto lo hace más eficiente., pero hasta los 100.000 elementos shellsort solo usa el doble de tiempo que quicksortpara ordenar el arreglo.

Page 10: Shell Sort

Concluyendo lo anterior

Para menos de 100.000 elementos Shellsort es mejor que Heapsort. Mergesort se comporta un poco mejor que Shellsort en tiempo de ejecucion, pero no trabaja “in place”, quicksort se comporta mejor que Shellsort y también opera “in place”, pero su desventaja es tener un peor caso O(n^2).

Shellsort no es el algoritmo mas eficiente para ordenar arreglos, pero es mucho mas fácil de programar.

Page 11: Shell Sort

Shell Sort en C++

Page 12: Shell Sort

Shell Sort puede que no sea el método de ordenamiento más eficiente para ordenar arreglos, pero es bastante sencillo de programar y de entender. Además, no requiere memoria adicional y es un mejora del ordenamiento por inserción.