METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del...
-
Upload
idoya-camargo -
Category
Documents
-
view
11 -
download
0
Transcript of METODOS DE ORDENAMIENTO. DESCRIPCIÓN DEL PROBLEMA Se tiene un conjunto desordenado de valores del...
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