Beruflich Dokumente
Kultur Dokumente
1. Mezcla Directa
2. Mezcla Natural
Mezcla Directa
Definición:
Este algoritmo consiste en tener un archivo A desordenado. Este archivo se ordenara haciendo los
siguientes pasos:
2.- Repartir el archivo A en dos archivos B y C escribiendo alternadamente un tramo en cada uno
3.- Aplicar el algoritmo de mezcla simple a cada par de tramos correspondiente de los archivos B y C
guardando el resultado en el archivo A
5.- Regresar al paso 2 si el tamaño del tramo es menor que la cantidad de elementos a ordenar
Programa:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
class Archivos
public:
char linea[128];
rewind(fich);
while(!feof(fich))
puts(linea);
int ordenado;
FILE *aux[2];
do
rewind(fich);
Separar(fich, aux);
rewind(aux[0]);
rewind(aux[1]);
rewind(fich);
fclose(aux[0]);
fclose(aux[1]);
}while(!ordenado);
remove("aux1.txt");
remove("aux2.txt");
int salida = 0;
strcpy(anterior[0], "");
strcpy(anterior[1], "");
while(!feof(fich))
salida = 1;
salida = 0;
strcpy(anterior[salida], linea);
fputs(linea, aux[salida]);
int entrada;
int tramos = 0;
strcpy(ultima, "");
strcpy(anterior[0], "");
entrada = 0;
else
entrada = 1;
strcpy(anterior[entrada], linea[entrada]);
fputs(linea[entrada], fich);
if(!entrada)
entrada = 1;
else
entrada = 0;
tramos++;
do
strcpy(anterior[entrada], linea[entrada]);
fputs(linea[entrada], fich);
if(!feof(aux[0]))
tramos++;
while(!feof(aux[0]))
if(!feof(aux[1]))
tramos++;
while(!feof(aux[1]))
fputs(linea[1], fich);
return(tramos == 1);
}tec;
main()
FILE *fichero;
int res,op=0,b=0;
while(op!=3)
clrscr();
gotoxy(1,1);
cin>>op;
gotoxy(1,10);
switch (op)
if(b!=1)
b=1;
tec.Mostrar(fichero);
else
break;
case 2:
tec.Mezcla(fichero);
tec.Mostrar(fichero);
break;
case 3:
cout<<"Salir..."<<endl;
break;
default:
cout<<"Opcion Erronea..."<<endl;
break;
fclose(fichero);
getch();
Mezcla Directa
Definición:
Es una mejora del algoritmo de mezcla directa puesto que en vez de considerar tramos de tamaño fijo se
toman en cuenta para la ordenación en todo momento tramos de longitud máxima.
Programa:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
void main(){
char n[10]="mezcla.txt";
mezcla_directa(n);
getch();
FILE *a,*b,*c;
int ra,rb;
a=fopen(A,"rb");
b=fopen(B,"rb");
c=fopen(C,"rb");
if(a&&b&&c)
fread(&ra,sizeof(ra),1,a);
fread(&rb,sizeof(rb),1,b);
while(!feof(a)&&!feof(b))
if(ra<=rb)
fwrite(&ra,sizeof(ra),1,c);
fread(&ra,sizeof(ra),1,a);
else
fwrite(&rb,sizeof(rb),1,c);
fread(&ra,sizeof(ra),1,b);
while(!feof(a))
fwrite(&ra,sizeof(ra),1,c);
fread(&ra,sizeof(ra),1,a);
while(!feof(a))
fwrite(&rb,sizeof(rb),1,c);
fread(&rb,sizeof(rb),1,b);
fclose(a);
fclose(b);
fclose(c);
FILE *a,*b,*c;
a=fopen(nom,"r+");
b=fopen("m1.txt","r+");
c=fopen("m2.txt","r+");
while(t<n){
partir(nom,t);
mezcla_simple("m1.txt","m2.txt",nom);
mezclar(nom,t);
t = t* 2;
FILE *a,*b,*c;
a=fopen(nom,"r+");
b=fopen("m1.txt","a+");
c=fopen("m2.txt","a+");
if(a&&b&&c){
fread(®,sizeof(reg),1,a);
while(!feof(a)){
if(sw)
fwrite(®,sizeof(reg),1,b);
else
fwrite(®,sizeof(reg),1,c);
fread(®,sizeof(reg),1,a);
sw=!sw ;
fclose(a);
fclose(b);
fclose(c);
FILE *a,*b,*c;
int rb,rc,ctb,ctc;
a= fopen(nom,"w+");
b= fopen("m1","r+");
c= fopen("m2","r+");
if(a&&b&&c){
fread(&rb,sizeof(rb),1,b);
fread(&rc,sizeof(rb),1,c);
ctb=ctc=t;
if(rb<rc){
fwrite(&rb,sizeof(rb),1,a);
fread(&rb,sizeof(rb),1,b);
ctb--;
else{
fwrite(&rc,sizeof(rc),1,a);
fread(&rc,sizeof(rc),1,c);
ctc--;
fwrite(&rb,sizeof(rb),1,a);
fread(&rb,sizeof(rb),1,b);
ctb--;
fwrite(&rc,sizeof(rc),1,a);
fread(&rc,sizeof(rc),1,c);
ctc--;
while(!feof(b)){
fwrite(&rb,sizeof(rb),1,a);
fread(&rb,sizeof(rb),1,b);
while(!feof(c)){
fwrite(&rc,sizeof(rc),1,a);
fread(&rc,sizeof(rc),1,c);
fclose(a);
fclose(b);
fclose(c);
remove("m1");
remove("m2");