Ordenamiento MergeSort

Claudia
06 de Junio del 2005
hola... espero que me puedan ayudar, estoy realizando un programa con metodos de ordenamiento y el MergeSort mezcla los dos arreglos pero no los ordena si alguien puede ayudarme y decirme que tengo que corregir se lo agradesco...


void mezcla (int a[], int b[], int c[], int n, int m)
{
int i=0, j=0, k=0, p;
while (i<m&&j<n) {
if (a[i]<=b[j]) {
c[k]=a[i];
i++;
}
else {
c[k]=b[j];
k++;
}
k++;
}
if (i==m) {
for (p=j;p<n;p++) {
c[k]=b[p];
k++;
}
else {
for (p=i;p<m;p++) {
c[k]=a[p];
k++;
}
}
}


ramirez david
06 de Junio del 2005
un poco tarde clua pero apenas ingrese a esta pagina ..
espero te sea de utilidad.....puedes esribime..bye

void mergesort(int *a,int lim_inf,int lim_sup){
int medio;
if(lim_inf==lim_sup);
else{
medio=(lim_inf+lim_sup)/2;
mergesort(a,lim_inf,medio);
mergesort(a,medio+1,lim_sup);
mezclar(a,lim_inf,lim_sup,medio);
}
}
void mezclar(int *a,int inf,int sup,int medio){
int aux[tam];
int i=inf,j=medio+1, k=0, k2, w;
while((i<=medio)&&(j<=sup)){
if(a[i]<a[j])
{
aux[k]=a[i];
k++;
i++;
}
else
{
aux[k]=a[j];
k++;
j++;
}
}
while(i<=medio)
{
aux[k]=a[i];
i++;
k++;
}
while(j<=sup)
{
aux[k]=a[j];
j++;
k++;
}
for(w=inf, k2=0;k2<k;w++, k2++){
a[w]=aux[k2];
}


}

angelucha84
06 de Junio del 2005
Tengo este codigo ojalá k te sirva Claudia

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int serie1[11],serie2[11],serie3[11],num;
int final[21];
int numeros[4];
int i,total=0;

void imprime (void);
void merge (void);

void merge (void)
{
int x=0,y=0,z=0,f=0;
while(f<total)
{
if(serie1[x]!=''&&serie2[y]!=''&&serie3[z]!='')
{
if(serie1[x]<serie2[y]&&serie1[x]<serie3[z])
{
final[f]=serie1[x];
x++;
f++;
}
if(serie2[y]<serie1[x]&&serie2[y]<serie3[z])
{
final[f]=serie2[y];
y++;
f++;
}
if(serie3[z]<serie1[x]&&serie3[z]<serie2[y])
{
final[f]=serie3[z];
z++;
f++;
}
}
else
{
if(serie1[x]==''&&serie2[y]!=''&&serie3[z]!='')
{
if(serie2[y]<serie3[z])
{
final[f]=serie2[y];
y++;
f++;
}
else
{
final[f]=serie3[z];
z++;
f++;
}

}
if(serie2[y]==''&&serie1[x]!=''&&serie3[z]!='')
{
if(serie1[x]<serie3[z])
{
final[f]=serie1[x];
x++;
f++;
}
else
{
final[f]=serie3[z];
z++;
f++;
}
}
if(serie3[z]==''&&serie1[x]!=''&&serie2[y]!='')
{
if(serie1[x]<serie2[y])
{
final[f]=serie1[x];
x++;
f++;
}
else
{
final[f]=serie2[y];
y++;
f++;
}
}

if(serie1[x]==''&&serie2[y]==''&&serie3[z]!='')
{
final[f]=serie3[z];
z++;
f++;
}
if(serie1[x]==''&&serie3[z]==''&&serie2[y]!='')
{
final[f]=serie2[y];
y++;
f++;
}
if(serie2[y]==''&&serie3[z]==''&&serie1[x]!='')
{
final[f]=serie1[x];
x++;
f++;
}
}
}



}

void imprime(void)
{
for(i=0;i<total;i++)
{
printf("%i,",final[i]);
}
getch();
}

void main (void)
{
clrscr();
for(i=0;i<3;i++)
{
printf("nCuantos elementos contiene el conjunto %i: ",i+1);
scanf("%i",&numeros[i]);
total=total+numeros[i];
if(numeros[i]>10)
{
printf("nS¢lo pueden ser 10 elementos...");
getch();
exit(0);
}

}
clrscr();
printf("nDatos del primer conjunto...nn");
for(i=0;i<numeros[0];i++)
{
printf("Numero: ");
scanf("%i",&serie1[i]);
}
printf("nDatos del segundo conjunto...nn");
for(i=0;i<numeros[1];i++)
{
printf("Numero: ");
scanf("%i",&serie2[i]);
}
printf("nDatos del tercer conjunto...nn");
for(i=0;i<numeros[2];i++)
{
printf("Numero: ");
scanf("%i",&serie3[i]);
}
merge();
imprime();
}




Unas por otras
Angelica

Pakillo
06 de Junio del 2005
// Ahi te va eso :D a mi me ordena,,, suerte Claudia!

void mergesort(TBase A[], int ini, int fin)
{
if(ini<fin){
int medio=(ini+fin)/2;
mergesort(A, ini, medio);
mergesort(A, medio+1, fin);
mezclar(A, ini, medio, fin);
}
}

void mezclar(TBase A[], int ini, int medio, int fin)
{ TBase temp[MAX];
int i, j, k;
i=ini;
j=medio+1;
k=ini;
while ((i<=medio)&&(j<=fin))
{
if (A[i]<A[j])
{
temp[k]=A[i];
i++;
k++;
}
else
{
temp[k]=A[j];
j++;
k++;
}

}
while(i<=medio)
{
temp[k]=A[i];
k++;
i++;
}
while(j<=fin)
{
temp[k]=A[j];
k++;
j++;
}
for(int h=ini; h<=fin; h++)
A[h]=temp[h];
}

Roberto Carlos
06 de Junio del 2005
Hola yo te puedo ayudar a realizar ese tipo de método, si te interesa te escribo mi direccion de correo:
[email protected]
Con gusto te ayudaré

juas
06 de Junio del 2005
como se nota q es una tia y os la kereis cepillar, le habeis respondido millones, el mejor es el q dice q le ha parecido una persona muy especial jajajajaja y otro bueno es el q deja su direccion de correo nada mas :D
jjajajjaaja

Anonimo
06 de Junio del 2005
La verdad no se que es el mergesort ni nada de computadoras pero me pareciste un persona muy especial