Ordenamiento MergeSort
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++;
}
}
}
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++;
}
}
}
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];
}
}
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];
}
}
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
#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
// 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];
}
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];
}
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é
[email protected]
Con gusto te ayudaré
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
jjajajjaaja
