domingo, 20 de enero de 2008

Método de Ordenación Fusión Natural en Lenguaje C

void fusion_natural(int *vec,int n,int *comp,int *mov)
{
int cambio=1,lizq,lder,lsal,i;
int otral,movlizq,movlsal,aux,*auxvec;
float compara=0,movimiento=0;

while (cambio==1)
{
auxvec=(int *)(malloc(n*sizeof(int)));
cambio=0;
lizq=0;
lder=n-1;
lsal=0;
otral=n-1;
movlizq=1;
movlsal=1;
while(lizq != lder)
{
compara++;
if (vec[lizq]>vec[lder])
{
aux=lizq;
lizq=lder;
lder=aux;
movlizq=-movlizq;
}
auxvec[lsal]=vec[lizq];
movimiento++;
lsal=lsal+movlsal;
lizq=lizq+movlizq;
compara++;
if (vec[lizq-movlizq]>vec[lizq])
{
compara++;
while (vec[lder+movlizq] <= vec[lder])
{
auxvec[lsal]=vec[lder];
movimiento++;
lsal=lsal+movlsal;
lder=lder-movlizq;
}
cambio=1;
movlsal=-movlsal;
aux=lsal;
lsal=otral;
otral=aux;
}
}
auxvec[lsal]=vec[lizq];
movimiento++;
for(i=0;i {
vec[i]=auxvec[i];
movimiento++;
}
}
*comp=compara;
*mov=movimiento;
}

1 comentario:

maria dijo...

no hay condición en el último for