You are on page 1of 10

Algoritmo de Mezcla Directa:

Dividir una secuencia inicial de datos en dos subcadenas y mezclar


elemento a elemento de forma ordenada.
El proceso se repite hasta que la secuencia inicial queda totalmente
ordenada.

1) Se divide la secuencia inicial de datos del fichero a en dos mitades b


yc
2) Se mezclan b y c combinando elementos aislados para formar pares
ordenados
3) La secuencia resultante se almacena en el fichero a y se repiten los
pasos 1) y 2) para formar cudruplos ordenados.
4) Se repiten los pasos anteriores para formar octetos ordenados, y as
sucesivamente.

Este metodo de llama mezcla porque combina dos o mas secuencias en una sola
secuencia ordenada por medio de la seleccion repetida de los componenetes
accesibles en ese momento.
Un arreglo individual puede usarse en lugar de dos secuencias si se considera como
de doble extremo. En este caso se tomaran elementos de los dos extremos del
arreglo para hacer la mezcla. El destino de los elementos combinados se cambia
despues de que cada par ha sido ordenado para llenar uniformemente las dos
secuencias que son el destino. Despues de cada pasada los dos extremos del
arreglo intercambian de papel, la fuente se convierte en el nuevo destino y
viceversa.

Fuente Destino
A={29,17,31,25, , , , ,}
N=4
12345678
UP=TRUE
P=1
do 1
H=1
M=N,M=4
Si UP=TRUE,TRUE=TRUE
(Si)
I=1
J=N,J=4
K=N+1,K=4+1= 5
L=2*N,L=2*4= 8

do 2
Si M>=P,4>=1 (Si)
Q=P
M=M-Q
Si M>=P,3>=1 (Si)
R=P,R= 1
M=M-R,M=3-1= 2
Mientras Q!=0 and R!=0 ------------ |
A|
1!=0 and 1!=0 (Si)
Si A[I]
29<25>
A[K]=A[J],A[5]=A[4]= 23
K=K+H,K=5+1= 6
J=J-1,J=4-1= 3
R=R-1,R=1-1= 0

-------> |A|
Mientras 1!=0 (Si) and 0!=0
(No) (Sale)
Mientras R>0,0>0 (No) (Sale)
Mientras Q>0,1>0 (Si)
A[K]=A[I],A[6]=A[1],A[6]=29
K=K+1,K=6+1= 7
I=I+1,I=1+1= 2
Q=Q-1.Q=1-1= 0
Mientras 0>0 (No) (Sale)
H=-H,H=-1 der->izq
T=K,T=7
K=L,K=8
L=T,L=7

MEZCLA NATURAL

El mtodo de Mezcla Natural consiste en aprovechar la existencia de secuencias ya ordenadas


dentro de los datos de los archivos. A partir de las secuencias ordenadas existentes en el archivo,
se obtienen particiones que se almacenan en dos archivos o ficheros auxiliares. Las particiones
almacenadas en estos archivos auxiliares se fusionan posteriormente para crear secuencias
ordenadas cuya longitud se incrementa arbitrariamente hasta conseguir la total ordenacin de los
datos contenidos en el archivo original.

Origen: [10,17],[5,8,9],[3,22,50],[4],[2,20,30],[11,16,19],[6,21,23]
Primera Iteracin: Las secuencias que se encuentren dentro del archivo origen se
almacenan de forma alternada en los archivos auxiliares:
Particin
Auxiliar1: [10,17],[3,22,50],[2,20,30],[6,21,23]
Auxiliar2: [5,8,9],[4,11,16,19]

La fusin se realiza por pares de secuencias de manera ordenada, as, la primer


nueva secuencia est formada por los elementos de la primera secuencia en el
archivo Auxiliar 1 y los elementos de la primera secuencia en el archivo Auxiliar2.
Si uno de los archivos auxiliares llega a su fin, las secuencias que se encuentren en
el otro archivo sin terminar se vacan directamente despus de las nuevas
secuencias:
Fusin en el archivo original
Origen: [5,8,9,10,17],[3,4,11,16,19,22,50],[2,20,30],[6,21,23]

Segunda Iteracin: Se repite el proceso de particin con las


nuevas secuencias:
Particin
Auxiliar1: [5,8,9,10,17],[2,20,30]
Auxiliar2: [3,4,11,16,19,22,50],[6,21,23]
Cuando al comparar un par de secuencias en los archivos auxiliares una de ellas
llega a su fin, entonces simplemente se vaca el resto de la secuencia que an
contiene elementos en la nueva secuencia. Este caso se observa claramente en el
par de secuencias azules: cuando se llega al elemento 17 del archivo Auxiliar1, la
nueva secuencia en la fusin simplemente incluye los elementos 19, 22 y 50 del
archivo Auxiliar2 al final.
Fusin en el archivo original
Origen: [3,4,5,8,9,10,11,16,17,19,22,50],[2,6,20,21,23,30]

public class MezclaNaturalMain


{
public static void main(String [] args)throws
Exception
{
InputStreamReader isr = new
InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String nombreArchivo = null;
MezclaNatural mezcla1 = new MezclaNatural();
Solicita el nombre de un archivo para poder
ordenarlo
System.out.println("Nombre del archivo:");
nombreArchivo = br.readLine();

Despliega el contenido del archivo


sin ordenar
mezcla1.desplegar(nombreArchivo);
Ordena el contenido del archivo
mezcla1.ordenar(nombreArchivo);
Verifica que el archivo este ordenado
correctamente
mezcla1.verificarOrdenamiento(nom
breArchivo);
}
}

You might also like