Tri par fusion

Fermé
foxwar abdoo Messages postés 12 Date d'inscription vendredi 25 novembre 2011 Statut Membre Dernière intervention 6 décembre 2011 - 6 déc. 2011 à 15:55
Bonjour,
j'ai une matrice et je souhaite la trié ligne par ligne j'ai fait ce essaye mai il marche pas
void fusion(int tabs[100][1000], int &debut1, int &fin1, int &fin2, int &d)
{
int c=0;
int tableau2[100][1000];
int debut2 = fin1+1;
c+=1;
int compteur1 = debut1;
c+=1;
int compteur2 = debut2;
c+=1;
int i;



// copie des éléments du début de tableau
for(i=debut1; i<=fin1; i++)
tableau2[d][i-debut1] = tabs[d][i];
c+=1;

// fusion des deux tableaux
for(i=debut1; i<=fin2; i++)
{
if(compteur1==debut2) // éléments du 1er tableau tous utilisés
break; // éléments tous classés
else
if(compteur2==(fin2+1)) // éléments du 2nd tableau tous utilisés
{ // copie en fin de tableau des éléments du 1er sous tableau
tabs[d][i] = tableau2[d][compteur1-debut1];

compteur1++;
c+=2;
}
else if(tableau2[d][compteur1-debut1]<tabs[d][compteur2])
{ // ajout d'1 élément du 1er sous tableau
tabs[d][i] = tableau2[d][compteur1-debut1];
c+=1;
compteur1++; // on avance ds le 1er sous tableau
c+=1;
}
else
{ // copie de l'élément à la suite du tableau
tabs[d][i] = tabs[d][compteur2];
c+=1;
compteur2++; // on avance ds le 2nd sous tableau
c+=1;
}
}

}

void triFusionAux(int tabs[100][1000], int debut, int fin, int d)
{ int c=0 ;

if(debut!=fin) // condition d'arrêt
{
int milieu = (debut+fin)/2; c++;
triFusionAux(tabs, debut, milieu,d); c++;// trie partie1
triFusionAux(tabs, milieu+1, fin, d); c++;// trie partie2
fusion(tabs, debut, milieu, fin, d); c++;// fusion des deux parties
}
}
void triFusion()
{
int complx[100]; int taille[100]; int nT;
int c ;
int d=0;
c+=1;
while(d<= nT)
{
if(taille[d]>0)
triFusionAux(Tab, 0, taille[d]-1,d); c++;
cTab[d]=c;
d++; c++;
}


}



merciiii de vouloir m'aider