On rappelle que le but de l'exercice est de déplacer dans un tableau d'entiers, les éléments de valeur 0 au début du tableau.
On définit deux méthodes pour déplacer ces éléments :
On utilise deux indices :
dès que l'on trouve un élément égal à zéro, on le place à l'indice i0, puis on incrémente i0.
L'inconvénient majeur de cette méthode est qu'elle échange t[i] avec t[i0] avec i = i0 lorsqu'on a des éléments zéro au début du tableau.
On modifie la méthode précédente pour chercher le premier élément qui n'est pas un zéro :
Voici quelques résultats avec un tableau de 100 éléments dont un tiers des éléments sont des 0.
On reporte le nombre d'affectations, de comparaisons et d'incrémentations, ainsi que le total de ces 3 opérations.
Remplissage | Méthode | Affectations | Comparaisons | Incrémentations | Total |
Aléatoire | Méthode 1 | 99 | 100 | 33 | 232 |
Aléatoire | Méthode 2 | 99 | 167 | 33 | 299 |
Que des 0 | Méthode 1 | 300 | 100 | 100 | 500 |
Que des 0 | Méthode 2 | 0 | 100 | 100 | 200 |
Sans 0 | Méthode 1 | 0 | 100 | 0 | 100 |
Sans 0 | Méthode 2 | 0 | 100 | 0 | 101 |
On remarque que dans le cas ou le tableau ne comprend que des zéro, la méthode 2 engendre moins de calculs (200) alors que la méthode 1 en engendre 500.
A présent, un test de performance avec un tableau de 100 millions d'éléments dont un tiers des éléments sont des 0. Le processeur utilisé est un AMD Ryzen 5 5600G.
Remplissage | Méthode | Affectations | Comparaisons | Incrémentations | Total | Temps (s) |
Aléatoire | Méthode 1 | 99999999 | 100000000 | 33333333 | 233333332 | 0.240853 |
Aléatoire | Méthode 2 | 99999999 | 166666667 | 33333333 | 299999999 | 0.236566 |
Que des 0 | Méthode 1 | 300000000 | 100000000 | 100000000 | 500000000 | 0.0919376 |
Que des 0 | Méthode 2 | 0 | 100000000 | 100000000 | 200000000 | 0.0367108 |
Sans 0 | Méthode 1 | 0 | 100000000 | 0 | 100000000 | 0.029863 |
Sans 0 | Méthode 2 | 0 | 100000001 | 0 | 100000001 | 0.027379 |