Ordenamiento shell

11
Presentado por: Ricardo Sánchez Joseph Castillo Ordenamiento Shell

Transcript of Ordenamiento shell

Page 1: Ordenamiento shell

Presentado por:Ricardo Sánchez

Joseph Castillo

Ordenamiento Shell

Page 2: Ordenamiento shell

¿Qué es ordenamiento?

Es la operación de arreglar los registros de una tabla en algún orden secuencial de acuerdo a un criterio de ordenamiento.

El ordenamiento se efectúa con base en el valor de algún campo en un registro.

El propósito principal de un ordenamiento es el de facilitar las búsquedas de los miembros del conjunto ordenado.

Introducción

Page 3: Ordenamiento shell

Ejemplos de Ordenamiento

Page 4: Ordenamiento shell

Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor tiempo.

El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso alfanumérico, ascendente o descendente.

¿Cuándo conviene usar un método de ordenamiento?

Page 5: Ordenamiento shell

Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos.

Los internos son aquellos en los que los valores a ordenar están en memoria principal, por lo que se asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1], a[500], etc.). Por ejemplo, el Shell sort, quicksort, merge sort.

Los externos son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta, cilindro magnético, etc.), por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la última posición accesada (posición 1, posición 500, etc.). Por ejemplo, Straight merging, Polyphase sort, Distribution of initial runs.

Tipos de Ordenamiento

Page 6: Ordenamiento shell

La ordenación Shell debe su nombre a su inventor, Donald L. Shell. Se suele denominar también ordenación por inserción con incrementos decrecientes. Se considera que el método Shell es una mejora de los métodos de inserción directa.

En el algoritmo de inserción, cada elemento se compara con los elementos contiguos de su izquierda, uno tras otro. Si el elemento a insertar es el más pequeño hay que realizar muchas comparaciones antes de colocarlo en su lugar definitivo.

El algoritmo de Shell modifica los saltos contiguos resultantes de las comparaciones por saltos de mayor tamaño y con ello se consigue que la ordenación sea más rápida. Generalmente se toma como salto inicial n/2 (siendo n el número de elementos), luego se reduce el salto a la mitad en cada repetición hasta que el salto es de tamaño 1.

Ordenación Shell o Shell Sort

Page 7: Ordenamiento shell

1. Dividir la lista original en n/2 grupos de dos, considerando un incremento o salto entre los elementos de n/2.

2. Clarificar cada grupo por separado, comparando las parejas de los elementos, y si no están ordenados, se intercambian.

3. Se divide ahora la lista en la mitad de grupos (n/4), con un incremento o salto entre los elementos también mitad (n/4), y nuevamente se clasifica cada grupo por separado.

4. Así sucesivamente se sigue dividiendo la lista en la mitad de grupos que el recorrido anterior con un incremento o salto decreciente en la mitad que el salto anterior, y luego clasificando cada grupo por separado.

5. El algoritmo termina cuando se consigue que el tamaño del salto es 1.

Pasos a Seguir

Page 8: Ordenamiento shell

Presentación Gráfica

Page 9: Ordenamiento shell

for (int gap=4/2;gap>0; gap=gap==2?1:(int)(gap/2.2)) { for(int i=gap; i<=4;i++) { int tmp=vec[i]; int j; for(j=i;j>=gap && tmp< vec[j-gap];j-=gap) { vec[j]=vec[j-gap]; } vec[j]=tmp; } }

Algoritmo

Ejecución del Algoritmo

Page 10: Ordenamiento shell

El Shell sort es una generalización del ordenamiento por inserción, teniendo en cuenta dos observaciones:

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

2. El ordenamiento por inserción es ineficiente, en general, porque mueve los valores sólo una posición cada vez.

El algoritmo Shell sort mejora el ordenamiento por inserción comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos más grandes" hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. El último paso del Shell sort es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados.

Conclusión

Page 11: Ordenamiento shell

Gracias por su Atención