Integrantes: Sergio Salinas Pablo Corrales Elías Gárate Claudio Saji Profesora: Rosa Barrera Capot
Jan 15, 2016
Integrantes:
Sergio Salinas
Pablo Corrales
Elías Gárate
Claudio Saji
Profesora: Rosa Barrera Capot
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.
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.
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:
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
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:
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.
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.
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.
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.
Shell Sort en C++
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.