Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Algoritmo de ordenamiento Shell Sort
Ayudante:
Cristóbal Fica
Integrantes:
Francisco Cares Michael Vargas
1 a n i g á P
25 de octubre de 2013
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Contenido Algoritmo de ordenamiento Shell Sort ........................................................................................ ........................................................................................ 1 Introducción .................................................................................................................................. .................................................................................................................................. 3 Shell Sort ....................................................................................................................................... ....................................................................................................................................... 3 Memoria .................................................................................................................................... .................................................................................................................................... 4 Pseudocódigo ................................................................................................................................ ................................................................................................................................ 5 Código en Matlab .................................................................................................... .......................................................................................................................... ...................... 6 Aplicación y alcances ............................................................. ..................................................................................................................... ........................................................ 6 Conclusión .................................................................................................... ..................................................................................................................................... ................................. 7 Bibliografía ................................................................. .................................................................................................................................... ................................................................... 7
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Introducción
El ordenamiento Shell (Shell Sort en inglés) es un algoritmo de ordenamiento, denominado así en honor a su inventor Donald Shell, que lo publicó en 1959. Algunos libros de texto y referencias antiguas le llaman ordenación "Shell-Metzner" por Marlene Metzner Norton, pero según Metzner, "No tengo nada que ver con el algoritmo de ordenamiento, y mi nombre nunca debe adjuntarse a éste.". El Shell Sort es una mejora del algoritmo de ordenamiento por inserción (Insertsort).
Shell Sort
La forma en que trabaja Shell Sort es la siguiente:
Organizar la secuencia de datos en una matriz de dos dimensiones
Ordenar las columnas de la matriz
El efecto producido es una secuencia de datos que se clasifica parcialmente. El proceso anterior se repite, pero cada vez con una gama más estrecha, es decir, con un menor número de columnas. En el último paso, la matriz consta de una sola columna. En cada paso, el ordenamiento de la secuencia se incrementa, hasta que en el último paso se encuentre completamente ordenado. Sin embargo, el número de operaciones necesarias en cada paso de clasificación es limitado, debido al pre-ordenamiento de la secuencia obtenida en los pasos anteriores.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Memoria ShellSort trabaja en la memoria principal, por lo que se asume que el tiempo de acceso es el mismo para cualquier elemento (acceso aleatorio). Ejemplo: Supongamos que [3 7 9 0 5 1 8 6 4 2 0 6 1 5 7 3 4 9 8 2] sea la secuencia secuencia de datos
para ser resuelto. En primer lugar, está dispuesto en una matriz con 7 columnas (izquierda), a continuación, se ordenan las columnas (a la derecha): 3 7 9 0 5 1 6
3 3 2 0 5 1 5
8 4 2 0 6 1 5
7 4 4 0 6 1 6
7 3 4 9 8 2
8 7 9 9 8 2
Los elementos de datos 8 y 9 ahora ya han llegado al final de la secuencia, sino un elemento pequeño (2) también sigue ahí. En el siguiente paso, la secuencia está dispuesta en 3 columnas, que se ordenan de nuevo: 3 3 2
0 0 1
0 5 1
1 2 2
5 7 4
3 3 4
4 0 6
4 5 6
1 6 8
5 6 8
7 9 9
7 7 9
8 2
8 9 Ahora la secuencia está casi completamente solucionada. Cuando la organización de
una columna en el último paso, que es sólo un 6, un 8 y un 9 tienen que trasladarse a su posición correcta.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Pseudocódigo
1) Algoritmo ShellSort(lista) 2) Pre: lista≠0 3) Post: lista tiene un o rdenamiento en los valores de forma ascendente 4) incremento←lista. incremento←lista. Contador/2 Contador/2 5) While incremento≠0 6)
Actual←incremento
7)
Whilea ctual
8)
hold←lista[actual]
9)
i←actual –i ncremento
10)
While i≥0 and hold
11)
Lista[i+incremento]←lista[i]
12)
i-=incremento
13)
End While
14)
List[i + incremento]←hold incremento]←hold
15)
actual←actual+1
16)
end While
17)
incremento/=2
18) end While 19) returnl ista 20) end ShellSort
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Código en Matlab function dataOut = shellSort(data) lenD = size(data,2); inc = cast(lenD/2 cast(lenD/2,'int16'); ,'int16'); while(inc>0) for i=inc:lenD tmp = data(i); j = i; while(j>inc && data(j-inc)>tmp) data(j) = data(j-inc); j = j-inc; end data(j) = tmp; end inc = cast(floor(double(inc) /2),'int16'); end dataOut = data;
Aplicación y alcances Aplicaciones evidentes:
Mostrar los ficheros de un directorio. Mostrar un listado ordenado del contenido de una base de datos (ej.: listado alfabético).
Ordenar los resultados de una búsqueda búsqueda en Internet (ej.: Google, PageRank).
Problemas que resultan más sencillos de r esolver con de Solver de ordenamiento: o rdenamiento:
Realizar una búsqueda búsqueda (p.ej... búsqueda binaria).
Encontrar la mediana.
Encontrar el par más cercano.
Identificar / “outliers” / anomalías
Detectar duplicados.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Universidad de Santiago de Chile Ingeniería Civil en Electricidad Laboratorio de Computación
Conclusión
El análisis de su eficiencia es un problema complicado y aun no resuelto, puesto que, ninguna persona ha sido capaz de establecer la mejor secuencia de incrementos cuando N es muy grande. De modo que Shell Sort no es el algoritmo más eficiente para ordenar arreglos comparándolo con la complejidad de los algoritmos Quicksort, Mergesort y Heapsort, sin embargo, es un algoritmo mucho más fácil de programar. Su simplicidad radica en que deriva del algoritmo más simple para ordenar, Insert Sort.
Bibliografía
Enciclopedia libre, Wikipedia . Modificada por última vez el 8 agosto, 2013.
http://es.wikipedia.org/wiki/Ordenamiento_Shell
Algoritmos de Ordenamiento, Fernando A. Lagos B.
http://blog.zerial.org/ficheros/Informe_Ordenamiento.pdf
Fachhochschule Flensburg, Universidad de Ciencias Aplicadas, Alemania. Publicado el
29 enero, 1998. http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/shell/shellen.htm