La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

METODOS DE ORDENAMIENTO

Presentaciones similares


Presentación del tema: "METODOS DE ORDENAMIENTO"— Transcripción de la presentación:

1 METODOS DE ORDENAMIENTO

2 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.

3 LOS ALGORITMOS DE ORDENAMIENTO SE UTILIZAN PARA RESOLVER AQUELLOS PROBLEMAS DE INFORMÁTICA DONDE INTERVIENEN LAS BÚSQUEDAS.

4 METODO DE LA BURBUJA

5 a[0] > a[1] lo cambio a[3] < a[4] no lo cambio a[0] a[1] a[2] a[3] a[4] a[5] 15 3 12 11 18 2 Primer pasada 3 15 12 11 18 2 3 12 15 11 18 2 3 12 11 15 18 2 3 12 11 15 18 2 3 12 11 15 2 18 Al finalizar el mayor de los términos ocupa el lugar del máximo subíndice

6 El último término está ordenado, ahora iremos hasta el término a[4]
Segunda pasada a[0] a[1] a[2] a[3] a[4] a[5] 3 12 11 15 2 18 3 12 11 15 2 18 3 11 12 15 2 18 3 11 12 15 2 18 3 11 12 2 15 18

7 Finalmente el vector quedó ordenado
3 11 12 2 15 18 Restantes Pasadas 3 11 12 2 15 18 3 11 12 2 15 18 3 11 2 12 15 18 3 11 2 12 15 18 3 11 2 12 15 18 Finalmente el vector quedó ordenado 3 2 11 12 15 18 3 2 11 12 15 18 2 3 11 12 15 18 2 3 11 12 15 18

8 Implementación en seudocódigo
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

9 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; }

10 METODO DE INSERCIÓN

11 a[1]<a[0]? Cambiarlo a[0] a[1] a[2] a[3] a[4] a[5] 15 3 12 11 18 2 a[1]>a[0]? Terminar la pasada Desarrollo del método 15 3 12 11 18 2 3 15 12 11 18 2 3 12 15 11 18 2 a[4]>a[3]? Terminar la pasada 3 12 15 11 18 2 3 12 11 15 18 2 3 11 12 15 18 2 3 11 12 15 18 2

12 Desarrollo de Método (cont.)
3 11 12 15 18 2 3 11 12 15 2 18 Desarrollo de Método (cont.) El vector está ordenado 3 11 12 2 15 18 3 11 2 12 15 18 3 2 11 12 15 18 2 3 11 12 15 18

13 Implementación del método en pseudocódigo
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

14 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; }

15 METODO DE SELECCIÓN

16 El menor ocupa el lugar que le corresponde, no lo tocamos más
V =0 Variable donde Guardamos el primer subíndice (0) Si a[1] < a[V] Hacer V =1 a[0] a[1] a[2] a[3] a[4] a[5] 15 3 12 11 18 2 a[2] < a[V]? No, Dejar Primer Pasada 15 a[V] 3 12 11 18 2 15 3 a[V] 12 11 18 2 15 3 a[V] 12 11 18 2 El menor ocupa el lugar que le corresponde, no lo tocamos más 15 3 a[V] 12 11 18 2 V = 5 15 3 a[V] 12 11 18 2 15 3 12 11 18 2 a[V] Seguidamente cambiamos a[V] con a[0] y el vector a queda 2 3 12 11 18 15

17 a[0] a[1] a[2] a[3] a[4] a[5] 2 3 a[V] 12 11 18 15 2 3 a[V] 12 11 18
Ahora empezamos haciendo V=1 a[0] a[1] a[2] a[3] a[4] a[5] 2 3 a[V] 12 11 18 15 Segunda Pasada V = 1 2 3 a[V] 12 11 18 15 2 3 a[V] 12 11 18 15 2 3 a[V] 12 11 18 15 Seguidamente cambiamos a[V] con a[1] ( puede hacerse ) 2 3 12 11 18 15 Puede verse que en esta pasada el vector quedó inalterado

18 Finalmente el vector quedó ordenado
2 3 12 a[V] 11 18 15 V = 3 2 3 12 11 a[V] 18 15 2 3 12 11 a[V] 18 15 Pasadas Restantes V = 3 Cambiar a[V] con a[2] 2 3 11 12 a[V] 18 15 V = 5 2 3 11 12 a[V] 18 15 Finalmente el vector quedó ordenado Cambiar a[V] con a[3] 2 3 11 12 18 a[V] 15 Cambiar a[V] con a[4] 2 3 11 12 15 18

19 Implementación del método en pseudocódigo
Para n = 0 hasta 4 Fin Para Hacer V = n Para i = n + 1 hasta 5 Fin Para Si a[ i ] < a[ V ] entonces hacer V = i Fin Si hacer aux = a[V] hacer a[V] = a[n] hacer a[n] = aux

20 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;

21 METODO DE SHELL

22 MODO DE FUNCIONAMIENTO
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. 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] Repetir el punto b) hasta que no se realice ningún cambio. Reducir a la mitad el intervalo x y repetir los pasos a) al c) hasta que el intervalo sea cero.

23 Desarrollo del método de Shell
a[4] < a[0]? Cambiarlo y anotar cambio El vector a tiene 8 términos comenzamos haciendo n = 4 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 18 25 3 11 6 15 13 5 Fin de la pasada.Hubieron cambios por lo que debemos repetir el proceso con n = 4 18 25 3 11 6 15 13 5 6 25 3 11 18 15 13 5 6 15 3 11 18 25 13 5 6 15 3 11 18 25 13 5 6 15 3 5 18 25 13 11

24 Desarrollo del método de Shell (cont.)
6 15 3 5 18 25 13 11 Esta vuelta no se produjeron cambios 6 15 3 5 18 25 13 11 6 15 3 5 18 25 13 11 6 15 3 5 18 25 13 11 6 15 3 5 18 25 13 11 Como no se produjeron cambios hacemos n = 2

25 Desarrollo del método de Shell (cont.)
Aquí se produce un cambio a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 6 15 3 5 18 25 13 11 3 15 6 5 18 25 13 11 Terminada la pasada. Hubieron cambios debemos repetir el proceso con n = 2 3 5 6 15 18 25 13 11 3 5 6 15 18 25 13 11 3 5 6 15 18 25 13 11 3 5 6 15 13 25 18 11 3 5 6 15 13 11 18 25

26 Desarrollo del método de Shell (cont.)
3 5 6 15 13 11 18 25 Aquí se produce un cambio 3 5 6 15 13 11 18 25 3 5 6 15 13 11 18 25 Terminada la pasada. Hubieron cambios debemos repetir el proceso con n = 2 3 5 6 15 13 11 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25

27 Desarrollo del método de Shell (cont.)
3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 No se produjeron cambios. Hacemos n = 1 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25

28 Desarrollo del método de Shell (cont.)
3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 No se produjeron cambios y además n = 1 Esto significa que el vector quedó ordenado 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25 3 5 6 11 13 15 18 25

29 Desarrollo del método en pseudocódigo
Hacer salto = 4 Repetir hacer salto = salto / 2 Mientras salto > 0 Repetir Hacer cambio = 0 Mientras cambio = 1 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

30 Desarrollo del método en C
{ 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 ); Desarrollo del método en C

31 FIN DE METODOS DE ORDENAMIENTO


Descargar ppt "METODOS DE ORDENAMIENTO"

Presentaciones similares


Anuncios Google