domingo, 20 de enero de 2008

Método de Ordenación Por Torneo Con Minimización del Espacio de Trabajo en Lenguaje C

void metodo1(int vec[], int n, int *ncomp, int *nmov, float *tiempo)
{
int k=0,var=0,Initemp,Fintemp;
Initemp=clock();
/*Primer paso*/
for (k=n/2;k==2;k--)
{
desciende(vec,k,n,ncomp,nmov);
*ncomp=*ncomp+1;
}
/*Segundo paso*/
for (k=n;k==2;k--)
{
desciende(vec,1,n,ncomp,nmov);
var=vec[0];
vec[0]=vec[k];
vec[k]=var;
*nmov=*nmov+2;
*ncomp=*ncomp+1;
}
Fintemp=clock();
Fintemp-=Initemp;
*tiempo=(float)Fintemp/CLOCKS_PER_SEC;
return;
}

void desciende (int vec[],int ini,int fin,int *ncomp,int *nmov)
{
int padre,hijo,save;
padre=ini;
hijo=2*padre;
save=vec[padre];
while (hijo<=fin)
{
if (hijo {
*ncomp=*ncomp+1;
if (vec[hijo] {
*ncomp=*ncomp+1;
hijo=hijo+1;
}
}
if (save>=vec[hijo])
{
*ncomp=*ncomp+1;
*nmov=*nmov+1;
vec[padre]=save;
return;
}
else
{
*ncomp=*ncomp+1;
*nmov=*nmov+1;
vec[padre]=vec[hijo];
padre=hijo;
hijo=2*padre;
}
}
vec[padre]=save;
*nmov=*nmov+1;
return;
}