domingo, 20 de enero de 2008

Método de Ordenación Batcher en Lenguaje C

void Metodo1 (int vec[], int n, int *ncomp, int *nmov, float *tiempo)
{
int tope,paso,mitad,ultpaso,distancia,aux,exp,i,t1,t2;
float total;
t1=clock();
*ncomp=0; /*Inicializo nmov y ncomp a 0 para que no hallan errores por acumulacion*/
*nmov=0; /*al repetir el metodo varias veces*/
exp= ceil (log(n)/log(2)); /*ceil = redondeo superior*/
tope=1< paso= tope;
while (paso != 0)
{
distancia= paso;
mitad= tope;
ultpaso= 0;
while(mitad >= paso)
{
for (i=0;i<(n-distancia); i++)
{
if ((i&paso)==ultpaso) /*& = and binario*/
{
*ncomp=*ncomp+1;
if (vec[i]>vec[i+distancia])
{
aux= vec[i+distancia];
vec[i+distancia]= vec[i];
vec[i]= aux;
*nmov=*nmov+2;
}
}
}
distancia= mitad-paso;
ultpaso= paso;
mitad= mitad/2;
}
paso=paso/2;
}
t2=clock();
*tiempo=((float)(t2-t1))/CLOCKS_PER_SEC;
}