Bookmark and Share

Liens sponsorisés

Login Form



Le Tri Fusion Print E-mail
Written by Administrator   

Le tri fusion est un algorithme de tri asymptotiquement optimal (complexité en T(nlogn) et consomme T(n) en mémoire).

Le tri repose sur le fait que pour fusionner deux listes/tableaux trié(e)s dont la somme des longueurs est n, n-1 comparaisons au maximum sont nécessaires.

Cet algorithme n'opère pas en place : il a besoin d'une zone temporaire de données de même taille que les données ; par ailleurs, pour des données en mémoire vive, il est en pratique sensiblement plus lent que d'autres algorithmes asymptotiquement optimaux comme le tri par tas

En C :

typedef int tab_entiers[MAX];

void fusion
(tab_entiers t, tab_entiers tmp, int de1, int vers1, int de2, int vers2, int count, int posInB) 
{
int i;
for(i = 0 ; i < count ; i++)
{
if(de2 > vers2)
tmp[posInB++] = t[de1++];
else if(de1 > vers1)
tmp[posInB++] = t[de2++];
else if(t[de1] <= t[de2])
tmp[posInB++] = t[de1++];
else
tmp[posInB++] = t[de2++];
}
}

void trifusion(tab_entiers t)
{
tab_entiers tmp;
int sortLength = 1, de1, de2, de3, i;
while(sortLength < MAX)
{
de1 = 0;
while(de1 < MAX)
{
de2 = de1 + sortLength;
de3 = de2 + sortLength;
if(de2>MAX) de2 = MAX;
if(de3>MAX) de3 = MAX;
fusion(t, tmp, de1, de2-1, de2, de3-1, de3-de1, de1);
de1 = de3;
}

for(i = 0 ; i < MAX ; i++) t[i] = tmp[i];
sortLength *= 2;
}
 

 

Liens sponsorisés