metodos de ordenamiento. descripciÓn del problema se tiene un conjunto desordenado de valores del...

Post on 10-Feb-2015

10 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

METODOS DE METODOS DE ORDENAMIENTOORDENAMIENTO

DESCRIPCIÓN DEL PROBLEMADESCRIPCIÓ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 LOS ALGORITMOS DE ORDENAMIENTO SE UTILIZAN PARA RESOLVER SE UTILIZAN PARA RESOLVER

AQUELLOS PROBLEMAS DE AQUELLOS PROBLEMAS DE INFORMÁTICA DONDE INTERVIENEN INFORMÁTICA DONDE INTERVIENEN

LAS BÚSQUEDAS.LAS BÚSQUEDAS.

METODO DE LA BURBUJAMETODO DE LA BURBUJA

a[0] a[1] a[2] a[3] a[4] a[5]

15 3 12 11 18 2

a[0] > a[1]lo cambio

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 Al finalizar el mayor de los términos ocupa el lugar del máximo subíndicedel máximo subíndice

Prim

er pasad

aP

rimer p

asada

a[3] < a[4]no lo cambio

a[0] a[1] a[2] a[3] a[4] a[5]

3 12 11 15 2 18

Segu

nd

a pasad

aS

egun

da p

asada

El último término está ordenado, ahora iremos hasta el término a[4]

3 12 11 15 2 18

3 11 12 15 2 18

3 11 12 15 2 183 11 12 2 15 18

Restan

tes Pasad

asR

estantes P

asadas

a[0] a[1] a[2] a[3] a[4] a[5]

3 11 12 2 15 18

3 11 12 2 15 183 11 12 2 15 18

3 11 2 12 15 18

3 11 2 12 15 18

3 11 2 12 15 18

3 2 11 12 15 18

3 2 11 12 15 18

2 3 11 12 15 18

2 3 11 12 15 18

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

Implementación en CImplementació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ÓNMETODO DE INSERCIÓN

Desarrollo d

el métod

oD

esarrollo del m

étodo

a[0] a[1] a[2] a[3] a[4] a[5]

15 3 12 11 18 2

15 3 12 11 18 2

3 15 12 11 18 2

3 12 15 11 18 2

a[1]<a[0]?Cambiarlo

a[1]>a[0]?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

a[4]>a[3]?Terminar la pasada

Desarrollo d

e Métod

o (cont.)

Desarrollo d

e Métod

o (cont.)

3 11 12 15 18 2

3 11 12 15 2 18

3 11 12 2 15 18

3 11 2 12 15 18

3 2 11 12 15 18

2 3 11 12 15 18

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

Implementación del método en CImplementació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ÓNMETODO DE SELECCIÓN

a[0] a[1] a[2] a[3] a[4] a[5]

15 3 12 11 18 2

Prim

er Pasad

aP

rimer P

asada

V =0 Variable donde Guardamos el primer subíndice (0)

15 a[V] 3 12 11 18 2

Si a[1] < a[V]Hacer V =1

15 3 a[V] 12 11 18 2

a[2] < a[V]?No, Dejar

15 3 a[V] 12 11 18 2

15 3 a[V] 12 11 18 2

15 3 a[V] 12 11 18 2

15 3 12 11 18 2 a[V]

V = 5

Seguidamente cambiamos a[V] con a[0] y el vector a queda

2 3 12 11 18 15

El menor ocupa el lugar que le corresponde, no lo tocamos más

Segu

nd

a Pasad

aS

egun

da P

asada

a[0] a[1] a[2] a[3] a[4] a[5]

2 3 a[V] 12 11 18 15

Ahora empezamos haciendo 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

V = 1

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

a[0] a[1] a[2] a[3] a[4] a[5]

2 3 12 a[V] 11 18 15

Pasad

as Restan

tesP

asadas R

estantes

2 3 12 11 a[V] 18 15

2 3 12 11 a[V] 18 15

V = 3

Cambiar a[V] con a[2]

2 3 11 12 a[V] 18 15

2 3 11 12 a[V] 18 15

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

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

Si a[ i ] < a[ V ] entonces

hacer V = i

Fin Si

Implementación en CImplementació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 SHELLMETODO DE SHELL

MODO DE FUNCIONAMIENTOMODO 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 ShellDesarrollo del método de Shell

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

18 25 3 11 6 15 13 5

El vector a tiene 8 términos comenzamos haciendo 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

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.)Desarrollo del método de Shell (cont.)

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

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

Esta vuelta no se produjeron cambios

6 15 3 5 18 25 13 11

Como no se produjeron cambios hacemos n = 2

Desarrollo del método de Shell (cont.)Desarrollo del método de Shell (cont.)

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

Aquí se produce un cambio

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

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]

3 5 6 15 13 11 18 25

Desarrollo del método de Shell (cont.)Desarrollo del método de Shell (cont.)

3 5 6 15 13 11 18 25

3 5 6 15 13 11 18 25

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

Aquí se produce un cambio

Terminada la pasada.Hubieron cambios

debemos repetir el proceso con n = 2

Desarrollo del método de Shell (cont.)Desarrollo del método de Shell (cont.)

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

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

3 5 6 11 13 15 18 25

3 5 6 11 13 15 18 25

No se produjeron cambios.Hacemos n = 1

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

3 5 6 11 13 15 18 25

Desarrollo del método de Shell (cont.)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

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 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ódigoDesarrollo 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 d

el métod

o en C

Desarrollo d

el métod

o 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 FIN DE METODOS DE ORDENAMIENTOORDENAMIENTO

top related