31
METODOS DE METODOS DE ORDENAMIENTO ORDENAMIENTO

METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

Embed Size (px)

Citation preview

Page 1: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

METODOS DE METODOS DE ORDENAMIENTOORDENAMIENTO

Page 2: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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.

Page 3: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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.

Page 4: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

METODO DE LA BURBUJAMETODO DE LA BURBUJA

Page 5: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 6: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 7: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 8: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 9: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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;

}

}

}

Page 10: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

METODO DE INSERCIÓNMETODO DE INSERCIÓN

Page 11: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 12: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 13: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 14: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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;

}

}

Page 15: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

METODO DE SELECCIÓNMETODO DE SELECCIÓN

Page 16: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 17: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 18: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 19: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 20: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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;

}

Page 21: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

METODO DE SHELLMETODO DE SHELL

Page 22: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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.

Page 23: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 24: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 25: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 26: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 27: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 28: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 29: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 30: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

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

Page 31: METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del mismo tipo. Se desea construir un algoritmo para transformar

FIN DE METODOS DE FIN DE METODOS DE ORDENAMIENTOORDENAMIENTO