METODOS DE ORDENAMIENTO
DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar dicho conjunto en un conjunto ordenado de la forma más sencilla y que se tare menor tiempo posible, empleando la menor cantidad de recursos. Lamentablemente a menor tiempo mayor complejidad de los algoritmos.
LOS ALGORITMOS DE ORDENAMIENTO SE UTILIZAN PARA RESOLVER AQUELLOS PROBLEMAS DE INFORMÁTICA DONDE INTERVIENEN LAS BÚSQUEDAS.
METODO DE LA BURBUJA
a[0]a[1]a[2]a[3]a[4]a[5] a[0] > a[1] lo cambio Al finalizar el mayor de los términos ocupa el lugar del máximo subíndice Primer pasada a[3] < a[4] no lo cambio
a[0]a[1]a[2]a[3]a[4]a[5] Segunda pasada El último término está ordenado, ahora iremos hasta el término a[4]
Restantes Pasadas a[0]a[1]a[2]a[3]a[4]a[5] Finalmente el vector quedó ordenado
Para j = 4 hasta 0 salto –1 Fin Para Para n = 0 hasta j Fin Para Si a[n] > a[n +1] entonces hacer x = a[n] hacer a[n] = a[n+1] hacer a[n+1] = x Fin Si Implementación en seudocódigo
Implementación en C // METODO DE BURBUJA for( j =4; x > 0; x-- ) { for( n = 0; n < j; n++ ) { if( a[ n ] > a[ n + 1 ] ) { aux = a[ n ]; a[ n ] = a[ n + 1 ]; a[ n + 1] = aux; }
METODO DE INSERCIÓN
Desarrollo del método a[0]a[1]a[2]a[3]a[4]a[5] a[1]<a[0]? Cambiarlo a[1]>a[0]? Terminar la pasada a[4]>a[3]? Terminar la pasada
Desarrollo de Método (cont.) El vector está ordenado
Para j = 1 hasta 5 hacer n = j Fin Para Mientras n > 1 y a[n] < a[ n-1] aux = a[n] a[n] = a[n-1] a[n-1] = aux hacer n = n - 1 Fin Mientras Implementación del método en pseudocódigo
Implementación del método en C //METODO DE SELECCION for( j = 1; x < CANT; x++ ) { n = j; while( n > 0 && a[ n ] < a[ n - 1 ] ) { aux = a[ n ]; a[ n ] = a[ n - 1 ]; a[ n - 1 ] = aux; n = n - 1; }
METODO DE SELECCIÓN
a[0]a[1]a[2]a[3]a[4]a[5] Primer Pasada V =0 Variable donde Guardamos el primer subíndice (0) 15 a[V] Si a[1] < a[V] Hacer V =1 153 a[V] a[2] < a[V]? No, Dejar 153 a[V] a[V] a[V] a[V] V = 5 Seguidamente cambiamos a[V] con a[0] y el vector a queda El menor ocupa el lugar que le corresponde, no lo tocamos más
Segunda Pasada a[0]a[1]a[2]a[3]a[4]a[5] 23 a[V] Ahora empezamos haciendo V=1 23 a[V] a[V] a[V] V = 1 Seguidamente cambiamos a[V] con a[1] ( puede hacerse ) Puede verse que en esta pasada el vector quedó inalterado
a[0]a[1]a[2]a[3]a[4]a[5] 2312 a[V] Pasadas Restantes a[V] a[V]1815 V = 3 Cambiar a[V] con a[2] a[V] a[V]1815 Cambiar a[V] con a[3] a[V]15 Cambiar a[V] con a[4] Finalmente el vector quedó ordenado V = 5 V = 3
Para n = 0 hasta 4 Fin Para hacer aux = a[V] hacer a[V] = a[n] hacer a[n] = aux Hacer V = n Para i = n + 1 hasta 5 Fin Para Implementación del método en pseudocódigo Si a[ i ] < a[ V ] entonces hacer V = i Fin Si
Implementación en C //MÉTODO DE SELECCIÓN for( n = 0; n < CANT - 1; n++ ) { V = n; for( i = n+ 1; i < CANT; i++ ) { if( a[i] < a[V] ) V = i; } aux = a[V]; a[V] = a[n]; a[n] = aux; }
METODO DE SHELL
MODO DE FUNCIONAMIENTO a.Seleccionar un intervalo x (generalmente se toma la mitad de términos del vector). Si el vector tiene 8 términos se toma x = 4. b.Recorrer el vector comparando n con el término n+x. Si este es menor se intercambian los valores. Si a[n+x] < a[n] entonces se cambian a[n] con a[n+x] c.Repetir el punto b) hasta que no se realice ningún cambio. d.Reducir a la mitad el intervalo x y repetir los pasos a) al c) hasta que el intervalo sea cero.
Desarrollo del método de Shell a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] El vector a tiene 8 términos comenzamos haciendo n = Fin de la pasada.Hubieron cambios por lo que debemos repetir el proceso con n = 4 a[4] < a[0]? Cambiarlo y anotar cambio
Desarrollo del método de Shell (cont.) a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] Esta vuelta no se produjeron cambios Como no se produjeron cambios hacemos n = 2
Desarrollo del método de Shell (cont.) a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] Aquí se produce un cambio Terminada la pasada. Hubieron cambios debemos repetir el proceso con n = 2
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] Desarrollo del método de Shell (cont.) Aquí se produce un cambio Terminada la pasada. Hubieron cambios debemos repetir el proceso con n = 2
Desarrollo del método de Shell (cont.) a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] No se produjeron cambios. Hacemos n = 1
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7] Desarrollo del método de Shell (cont.) No se produjeron cambios y además n = 1 Esto significa que el vector quedó ordenado
Hacer salto = 4 Repetir hacer salto = salto / 2 Mientras salto > 0 Repetir Hacer cambio = 0 Mientras cambio = 1 Desarrollo del método en pseudocódigo Para n = salto hasta 7 Si a[n] < a[n-salto] entonces aux = a[n] a[n] = a[n – salto] a[n – salto] = aux hacer cambio = 1 Fin si Fin para
Desarrollo del método en C do { do { cambio = 0; for( n = salto; n < CANT ; n++ ) { if ( a [ n ] < a[ n - salto ] ) { aux = a[ n ]; a[ n ] = a[ n - salto ]; a[ n - salto ] = aux; cambio = 1; } }while ( cambio == 1 ); salto /= 2; }while ( salto > 0 );
FIN DE METODOS DE ORDENAMIENTO