Ordenacion por mezcla equilibrada

Iniciado por danielo-, 30 Noviembre 2009, 06:27 AM

0 Miembros y 1 Visitante están viendo este tema.

danielo-

Hola...de nuevo aki dando lata...  :rolleyes:
alguno tiene el codigo de Ordenacion de datos por mezcla equilibrada? es para una clase de estructura de datos, y no piensen que soy flojo, es solo que ya le heché varias horas y solo no me sale... y me estoy desesperando pues lo necesito  :o .. y pues ya sea que me lo pasen o que me ayuden a terminarlo, la partición inicial me sale a la perfeccion, la parte de particion-fusion es la que no me sale, aki les dejo los dos codigos:
Código (java) [Seleccionar]


import java.io.*;

public  class Particion_Inicial{

public  Particion_Inicial(){

}

public int atoi(String x){
return Integer.parseInt(x);
}

public void partiendo(){
boolean band;
int aux,r;
try{
FileReader fr=new FileReader("F.txt");
BufferedReader f=new BufferedReader(fr);

File ff2=new File("F2.txt");
FileWriter fwf2=new FileWriter(ff2);
BufferedWriter bwf2=new BufferedWriter(fwf2);
PrintWriter f2=new PrintWriter(bwf2);

File ff3=new File("F3.txt");
FileWriter fwf3=new FileWriter(ff3);
BufferedWriter bwf3=new BufferedWriter(fwf3);
PrintWriter f3=new PrintWriter(bwf3);

r=atoi(f.readLine());
f2.println(r);
f2.flush();

band=true;
aux=r;

String oto;
while((oto=f.readLine())!=null){
r=atoi(oto);
if(r>=aux){
aux=r;
if(band==true){
f2.println(r);
f2.flush();
}
else if(band==false){
f3.println(r);
f3.flush();
}
}
else {
aux=r;
if (band==true){
f3.println(r);
f3.flush();
band=false;
}
else{
f2.println(r);
f2.flush();
band=true;
}
}
}
f2.close();
f3.close();
}

catch(IOException e){
System.out.println(e);
e.printStackTrace();
}
}

public static void main(String arg[]){
Particion_Inicial pi=new Particion_Inicial();
pi.partiendo();
}
}



el que sigue es el del problema:
Código (java) [Seleccionar]


import java.io.*;

public class Particion_fusion{

public Particion_fusion(){
}

public int atoi(String x){
return Integer.parseInt(x);
}
public void fusionando(){
int r1=0,r2=0,aux;
boolean ban1,ban2,ban3;

try{
FileReader fra=new FileReader("F2.txt");
BufferedReader fa=new BufferedReader(fra);

FileReader frb=new FileReader("F3.txt");
BufferedReader fb=new BufferedReader(frb);

File ffc=new File("F.txt");
FileWriter fwfc=new FileWriter(ffc);
BufferedWriter bwfc=new BufferedWriter(fwfc);
PrintWriter fc=new PrintWriter(bwfc);

File ffd=new File("F1.txt");
FileWriter fwfd=new FileWriter(ffd);
BufferedWriter bwfd=new BufferedWriter(fwfd);
PrintWriter fd=new PrintWriter(bwfd);

ban1=true;
ban2=true;
ban3=true;

aux=-32768;

String otoA,otoB;
int h=0;
boolean ba=false,bb=false;

while((((otoA=fa.readLine())!=null)||(ban1==false))&&(((otoB=fb.readLine())!=null)||(ban2==false))){
try{r1=atoi(otoA);}catch(Exception e){}
try{r2=atoi(otoB);}catch(Exception e){}

if(ban1==true){
ban1=false;
}
if(ban2==true){
ban2=false;
}
if(r1<r2){
if(r1>=aux){
if(ban3==true){
fc.println(r1);
fc.flush();
}
else{
fd.println(r1);
fd.flush();
}
ban1=true;
aux=r1;
if(ban3==true){
fc.println(r2);
fc.flush();
ban3=false;
}
else {
fd.println(r2);
fd.flush();
ban3=true;//***
}
ban2=true;
aux=-32768;
}
else if(r2>=aux){
if(ban3==true){
fc.println(r2);
fc.flush();
}
else{
fd.println(r2);
fd.flush();
}
ban2=true;
aux=r2;
if(ban3==true){
fc.println(r1);
fc.flush();
ban3=false;
}
else{
fd.println(r1);
fd.flush();
ban3=true;
}
ban1=true;
aux=-32768;
}
}
}
System.out.println("------------------------------------");
if(ban1==false){
if(ban3==true){
fc.println(r1);
fc.flush();
while((otoA=fa.readLine())!=null){
//r1=atoi(otoA);
try{r1=atoi(otoA);}catch(Exception e){}
fc.println(r1);
fc.flush();
}
}
else{
fd.println(r1);
fd.flush();
while((otoA=fa.readLine())!=null){
try{r1=atoi(otoA);}catch(Exception e){}
//r1=atoi(otoA);
fd.println(r1);
fd.flush();
}
}
}
if(ban2==false){
if(ban3==true){
fc.println(r2);
fc.flush();
while((otoB=fb.readLine())!=null){
try{r2=atoi(otoB);}catch(Exception e){}
fc.println(r2);
fc.flush();
}
}
else{
fd.println(r1);
fd.flush();
while((otoB=fb.readLine())!=null){
try{r2=atoi(otoB);}catch(Exception e){}
fd.println(r2);
fd.flush();
}
}
}
fc.close();
fd.close();
fa.close();
fb.close();
}
catch(Exception e){
e.printStackTrace();
}
}

public static void main(String arg[]){
Particion_fusion pf=new Particion_fusion();
pf.fusionando();
}

}



ya ven que si le eche ganas??? ... el resultado de la primera particion me sale genial... pero el de la particion-fusion... me arroja erroneamente los datos... y pues e revisado el algoritmo 10 veces y no me sale!!! ayuda porfa!!! me base en el algoritmo que se encuentra en el libro de estructura de datos del autor cairo... aki una pagina que tiene el mismo algoritmo... http://sistemas.itlp.edu.mx/tutoriales/estructuradedatos/t712.html
espero sus respuestas... hasta pronto!

ria1896

Acaso lo pudiste resolver? Tengo el mismo problema.