Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ayudante: Integrantes:
25 de octubre de 2013
Pgina
Contenido
Algoritmo de ordenamiento Shell Sort ........................................................................................ 1 Introduccin .................................................................................................................................. 3 Shell Sort ....................................................................................................................................... 3 Memoria .................................................................................................................................... 4 Pseudocdigo ................................................................................................................................ 5 Cdigo en Matlab .......................................................................................................................... 6 Aplicacin y alcances ..................................................................................................................... 6 Conclusin ..................................................................................................................................... 7 Bibliografa .................................................................................................................................... 7
25 de octubre de 2013
Pgina
Introduccin
El ordenamiento Shell (Shell Sort en ingls) 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 ordenacin "Shell-Metzner" por Marlene Metzner Norton, pero segn 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 insercin (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 ms estrecha, es decir, con un menor nmero 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 nmero de operaciones necesarias en cada paso de clasificacin es limitado, debido al pre-ordenamiento de la secuencia obtenida en los pasos anteriores.
25 de octubre de 2013
Pgina
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 de datos para ser resuelto. En primer lugar, est dispuesto en una matriz con 7 columnas (izquierda), a continuacin, se ordenan las columnas (a la derecha): 3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2 3 3 2 0 5 1 5 7 4 4 0 6 1 6 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 pequeo (2) tambin sigue ah. En el siguiente paso, la secuencia est dispuesta en 3 columnas, que se ordenan de nuevo: 3 3 2 0 5 1 5 7 4 4 0 6 1 6 8 7 9 9 8 2 0 0 1 1 2 2 3 3 4 4 5 6 5 6 8 7 7 9 8 9 Ahora la secuencia est casi completamente solucionada. Cuando la organizacin de una columna en el ltimo paso, que es slo un 6, un 8 y un 9 tienen que trasladarse a su posicin correcta.
25 de octubre de 2013
Pgina
Pseudocdigo
1) Algoritmo ShellSort(lista) 2) Pre: lista0 3) Post: lista tiene un ordenamiento en los valores de forma ascendente 4) incrementolista. Contador/2 5) While incremento0 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) Actualincremento While actual<lista. Contador holdlista[actual] iactual incremento While i0 and hold<lista[i] Lista[i+incremento]lista[i] i-=incremento End While List[i + incremento]hold actualactual+1 end While incremento/=2
25 de octubre de 2013
Pgina
Cdigo en Matlab
function dataOut = shellSort(data) lenD = size(data,2); inc = cast(lenD/2,'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;
Aplicacin y alcances
Aplicaciones evidentes: Mostrar los ficheros de un directorio. Mostrar un listado ordenado del contenido de una base de datos (ej.: listado alfabtico). Ordenar los resultados de una bsqueda en Internet (ej.: Google, PageRank).
Problemas que resultan ms sencillos de resolver con de Solver de ordenamiento: Realizar una bsqueda (p.ej... bsqueda binaria). Encontrar la mediana. Encontrar el par ms cercano. Identificar / outliers / anomalas Detectar duplicados.
25 de octubre de 2013
Pgina
Conclusin
El anlisis 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 ms eficiente para ordenar arreglos comparndolo con la complejidad de los algoritmos Quicksort, Mergesort y Heapsort, sin embargo, es un algoritmo mucho ms fcil de programar. Su simplicidad radica en que deriva del algoritmo ms simple para ordenar, Insert Sort.
Bibliografa
Enciclopedia libre, Wikipedia. Modificada por ltima vez el 8 agosto, 2013.
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
25 de octubre de 2013
Pgina