Você está na página 1de 8

UNIVERSIDAD NACIONAL DE CAJAMARCA

ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA

INGENIERIA DE SISTEMAS

CURSO:
ALGORITMOS Y ESTRUCURA
DE DATOS I

DOCENTE:
ROGER MANUEL SANCHEZ CHAVEZ

TEMA:
ALGORITMO DE ORDENAMIENTO SHELLSORT

INTEGRANTES:
BRIONES PRIETO FRANKI ELI
ARANA VARGAS
CUEVA ESTELA ALCIVIADES
RAMOS VASQUEZ RONAL IVAN
D
CICLO II-GRUPO B

Cajamarca 17 de noviembre 2015

INTRODUCION
El estudio de algoritmos de ordenamiento tiene una gran importancia dentro de la
Ciencia de la Computacin, pues una buena cantidad de los procesos realizados por
medios computacionales requieren que sus datos estn ordenados. Adems, el hecho de
almacenar los datos de manera ordenada permite implementar algoritmos de bsqueda
muy rpidos (por ejemplo: bsqueda binaria). Esta y muchas otras razones de fin
prctico impulsaron el estudio y la bsqueda de algoritmos de ordenamiento eficientes.

DE QUE SE TRATA EL ALGORITMO SHELLSORT


El Shell sort es una generalizacin del ordenamiento por insercin, teniendo en cuenta
dos observaciones:
1. El ordenamiento por insercin es eficiente si la entrada est "casi ordenada".
2. El ordenamiento por insercin es ineficiente, en general, porque mueve los
valores slo una posicin cada vez.
El algoritmo Shell sort mejora el ordenamiento por insercin comparando elementos
separados por un espacio de varias posiciones. Esto permite que un elemento haga
"pasos ms grandes" hacia su posicin esperada. Los pasos mltiples sobre los datos se
hacen con tamaos de espacio cada vez ms pequeos. El ltimo paso del Shell sort es
un simple ordenamiento por insercin, pero para entonces, ya est garantizado que los
datos del vector estn casi ordenados.

EXPLICACION GRAFICA
Veremos un ejemplo ordenando de menor a mayor (ascendentemente) la
siguiente lista de nmeros:
7, 3, 10, 1, 9, 8, 4
La lista tiene 7 elementos (de 0 a 6), con lo cual obtendremos un intervalo inicial de 3,
divisin entera de 7 entre 2 (7 div 2). Desde el elemento 3 se ordena la lista por
insercin, hacia la izquierda tomando los elementos de 3 en 3, y as hasta terminar de
recorrer la lista.
1er recorrido: intervalo 3, resultado de la divisin entera de 7 entre 2.
Desde el elemento 3. Elementos a ordenar: Se colocan los elementos ordenados por
7, 1
insercin
7
1
7 3 10 1 9 8 4

1 3 10 7 9 8 4

Desde el elemento 4. Elementos a ordenar: Se colocan los elementos ordenados por


3, 9
insercin
3
9
1 3 10 7 9 8 4

1 3 10 7 9 8 4

Desde el elemento 5. Elementos a ordenar: Se colocan los elementos ordenados por


10, 8
insercin
10
8
1 3 10 7 9 8 4

1 3 8 7 9 10 4

Desde el elemento 6. Elementos a ordenar: Se colocan los elementos ordenados por


1, 7, 4
insercin
1
7
4
1 3 8 7 9 10 4

1 3 8 4 9 10 7

2do recorrido: intervalo 1, resultado de la divisin entera de 3 entre 2.


La lista se ordena con un intervalo de 1, es decir desde el elemento 1 hasta el ltimo
elemento de la lista. En esta parte el algoritmo se comporta como en el algoritmo de
insercin y la lista se ordena haciendo menos intercambios.
1 3 4 7 8 9 10
Los recorridos terminan cuando el intervalo sea mayor que 0

IMPLEMENTACION EN ALGORITM Inicio

k= arreglo de datos a ordenar


h=tamao del grupo
i,j=ndices para el arreglo
v=variable auxiliar
n=nmero de elementos
Grupo=arreglo con los tamaos de grupo

Inicio
grupo=[7, 3, 10, 1, 9, 8, 4]
Para( i=0; i<7; i++)

Para( i=h;i<7;i++)
v=k[i]
j=i;

Mientras(j>=h && a[j-h]>v)


k[j]=k[j-h];
j=j-h;
k[j]=v;

mostar "h=grupo[g]"
fin

EJERCICIO 1
Supongamos que se desea ordenar los elementos que se encuentran en el arreglo
unidimensional A utilizando el mtodo de Shell. A: 15 67 08 16 44 27 12
35 56 21 13 28 60 36 07 10. Este algoritmo permite ordenar los elementos
de un arreglo unidimensional de menor a mayor utilizando el mtodo de Shell. A es un
arreglo unidimensional de N elementos.
package ordenamientoshell;
public class ascendente {
public static void main(String[] args) {
int arrayEntrada[]={15, 67, 8,16, 44, 27,12 ,35 , 56 , 21,13, 28, 60, 36,07,
10}; //Este es el array de elementos que vamos a ordenar
shellSort(arrayEntrada); //llamada al metodo shellSort
for (int i=0;i < arrayEntrada.length;i++){ //Este bucle imprime el contenido
del array
System.out.print(arrayEntrada[i]+" ");
}//fin del for
}//fin del main
public static void shellSort( int a[ ]){
for( int gap = a.length / 2; gap > 0; gap = gap == 2 ? 1 : (int) ( gap / 2.2 ) ){
for( int i = gap; i < a.length; i++ ){
int tmp = a[ i ];
int j;
for(j = i; j >= gap && tmp < a[ j - gap ] ; j -= gap ){
a[ j ] = a[ j - gap ];
}
a[ j ] = tmp;
}
}
}

EJERCICIO 2
Se desea crear un arreglo de n valores, el valor de n se ingresara por teclado y cada
valor del vector tambin, se mostrara el arreglo en forma ascendente.

package ordenamientoshell;
public class ordenar {
public static void main(String[] args) {
Scanner xd=new Scanner(System.in);
System.out.println("ingrese el numeo de elementos del arreglo");
int p=xd.nextInt();
int[] alf=new int[p];
System.out.println("ingrese los valores de su arreglo a ordenar");
for (int i = 0; i < alf.length; i++) {
alf[i]=xd.nextInt();
}
System.out.println("..............salia e datos");
shellSort (alf);
for (int i = 0; i < alf.length; i++) {
System.out.println(""+alf[i]);
}
}
public static void shellSort(int[] a){
for( int gap = a.length / 2; gap > 0; gap = gap == 2 ? 1 : (int) ( gap /
2.2 ) ){
for( int i = gap; i < a.length; i++ ){
int tmp = a[ i ];
int j;
for(j = i; j >= gap && tmp < a[ j - gap ] ; j -= gap ){
a[ j ] = a[ j - gap ];
}
a[ j ] = tmp;
}
}
}
}

CONCLUSIONES
Con el algoritmo de Shell la comparacin se hace con intervalos mayores a uno,
logrando con ello que la ordenacin sea ms rpida. Generalmente se toma como
intervalo inicial n div 2, siendo n la cantidad de elementos de la lista a ordenar, luego se
reduce los intervalos a la mitad hasta que el intervalo llegue a ser uno. Cuando la
ordenacin de la lista se hace con un intervalo de 1 el algoritmo se comporta como el
algoritmo de insercin, pero con la ventaja de que al tener una lista casi ordenada,
debido a los ordenamientos por intervalos anteriores, el ordenamiento se har ms
rpido.

BIBLIOGRAFIA
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap08-03Ordenamiento%20Shell%20(Shell%20sort).php
http://enrrike87.blogspot.pe/2011/06/metodos-de-ordenamiento-java_21.html
http://aprenderaprogramar.com/index.php?
option=com_content&view=article&id=287:como-escribir-programas-o-algoritmos-enpseudocodigo-ejemplos-ejercicios-resueltos-cu00135a&catid=28:curso-basesprogramacion-nivel-i&Itemid=59
http://estructura-de-datos-itsav.blogspot.pe/2012/03/613-shell-sort-ordenacion.html

Você também pode gostar