G4uthier
Messages postés131Date d'inscriptiondimanche 2 décembre 2007StatutMembreDernière intervention23 juillet 2009
-
1 juin 2009 à 00:38
G4uthier
Messages postés131Date d'inscriptiondimanche 2 décembre 2007StatutMembreDernière intervention23 juillet 2009
-
1 juin 2009 à 11:50
Bonjour,
voila j'ai trouvé cet algorithme de tri fusion sur wikipedia mais pour des entiers.
Je l'ai testé avec un tableau d'entier, ca fonctionne.
Mais en l'adaptant à mon probleme avec un tableau de structure, ca ne fonctionne pas . Il ne me fait rien :? Pourquoi ?
void fusion(int nbsommets,Station metro[nbsommets], Station tmp_metro[nbsommets] , int de1, int vers1, int de2, int vers2, int count, int posInTmp)
{
int i;
for(i = 0 ; i < count ; i++)
{
if (de2 > vers2) // Si fin de la liste 2, on prend dans liste 1
strcpy(tmp_metro[posInTmp++].nom_station,metro[de1++].nom_station);
//tmp[posInTmp++] = t[de1++];
else if (de1 > vers1) // Idem si fin de la liste 1
strcpy(tmp_metro[posInTmp++].nom_station,metro[de2++].nom_station);
//tmp[posInTmp++] = t[de2++];
else if (strcmp(metro[de1].nom_station,metro[de1].nom_station)<=0){//(t[de1] <= t[de2]) // Enfin, sinon, on compare
//printf("%s la \n",tmp_metro[de1++].nom_station);
strcpy(tmp_metro[posInTmp++].nom_station,metro[de1++].nom_station);/*printf("%s\n",tmp_metro[posInTmp++].nom_station);*/}
// tmp[posInTmp++] = t[de1++];
else
strcpy(tmp_metro[posInTmp++].nom_station,metro[de2++].nom_station);
//tmp[posInTmp++] = t[de2++];
}
}
// Tri de tout le tableau t par fusions successives
void trifusion(int nbsommets,Station metro[nbsommets])
{
Station tmp_metro[nbsommets];
int sortLength = 1, de1, de2, de3, i;
while(sortLength < nbsommets)
{
de1 = 0;
while(de1 < nbsommets)
{
de2 = de1 + sortLength;
de3 = de2 + sortLength;
if(de2>nbsommets) de2 = nbsommets;
if(de3>nbsommets) de3 = nbsommets;
fusion(nbsommets,metro, tmp_metro, de1, de2-1, de2, de3-1, de3-de1, de1);
de1 = de3;
}
for(i 0 ; i < nbsommets ; i++) strcpy(metro[i].nom_station,tmp_metro[i].nom_station);//t[i] tmp[i];
sortLength *= 2;
}
}
G4uthier
Messages postés131Date d'inscriptiondimanche 2 décembre 2007StatutMembreDernière intervention23 juillet 2009 1 juin 2009 à 00:42
// Fusion des listes t(de1..vers1) et t(de2..vers2) dans tmp(posInTmp..posInTmp+count-1)
void fusion(int nbsommets,Station metro[nbsommets], Station tmp_metro[nbsommets] , int de1, int vers1, int de2, int vers2, int count, int posInTmp)
{
int i;
for(i = 0 ; i < count ; i++)
{
if (de2 > vers2) // Si fin de la liste 2, on prend dans liste 1
strcpy(tmp_metro[posInTmp++].nom_station,metro[de1++].nom_station);
//tmp[posInTmp++] = t[de1++];
else if (de1 > vers1) // Idem si fin de la liste 1
strcpy(tmp_metro[posInTmp++].nom_station,metro[de2++].nom_station);
//tmp[posInTmp++] = t[de2++];
else if (strcmp(metro[de1].nom_station,metro[de1].nom_station)<=0){//(t[de1] <= t[de2]) // Enfin, sinon, on compare
//printf("%s la \n",tmp_metro[de1++].nom_station);
strcpy(tmp_metro[posInTmp++].nom_station,metro[de1++].nom_station);/*printf("%s\n",tmp_metro[posInTmp++].nom_station);*/}
// tmp[posInTmp++] = t[de1++];
else
strcpy(tmp_metro[posInTmp++].nom_station,metro[de2++].nom_station);
//tmp[posInTmp++] = t[de2++];
}
}
// Tri de tout le tableau t par fusions successives
void trifusion(int nbsommets,Station metro[nbsommets])
{
Station tmp_metro[nbsommets];
int sortLength = 1, de1, de2, de3, i;
while(sortLength < nbsommets)
{
de1 = 0;
while(de1 < nbsommets)
{
de2 = de1 + sortLength;
de3 = de2 + sortLength;
if(de2>nbsommets) de2 = nbsommets;
if(de3>nbsommets) de3 = nbsommets;
fusion(nbsommets,metro, tmp_metro, de1, de2-1, de2, de3-1, de3-de1, de1);
de1 = de3;
}
for(i 0 ; i < nbsommets ; i++) strcpy(metro[i].nom_station,tmp_metro[i].nom_station);//t[i] tmp[i];
sortLength *= 2;
}
}
G4uthier
Messages postés131Date d'inscriptiondimanche 2 décembre 2007StatutMembreDernière intervention23 juillet 2009 1 juin 2009 à 11:50
Bonjour, voila j'ai trouvé cet algorithme de tri fusion sur wikipedia mais pour des entiers. Je l'ai testé avec un tableau d'entier, ca fonctionne. Mais en l'adaptant à mon probleme avec un tableau de structure, ca ne fonctionne pas . Il ne me fait rien :? Pourquoi ?