| Programmez par plaisir! |
30-07-2010 03:43 |
Le principe de cet algorithme est de diviser le tableau en
sous tableaux de les traiter et ensuite de les fusionner. Cet algorithme est
récursif. On divise le tableau en deux sous tableaux qui sont eux mêmes sont
divisés en deux sous tableaux, etc.. La condition d'arrêt est lorsque le
tableau ne comporte plus qu'un seul élément.
L'algorithme contient plusieurs parties : la division du tableau en deux,
le tri des deux tableaux et la fusion des deux tableaux.
void fusion(int
tableau[],const int debut1,const
int fin1,const int fin2) |
Exemple :
Les grandes étapes de l'algorithme :
| 53 | 31 | 10 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 53 | 31 | 10 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 53 | 31 | 10 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 53 | 31 | 10 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 31 | 53 | 10 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 10 | 31 | 53 | 87 | 13 | 59 | 62 | 26 | 47 | 38 |
| 10 | 31 | 53 | 13 | 87 | 59 | 62 | 26 | 47 | 38 |
| 10 | 13 | 31 | 53 | 87 | 59 | 62 | 26 | 47 | 38 |
| etc... | |||||||||
| 10 | 13 | 31 | 53 | 87 | 26 | 38 | 47 | 59 | 62 |
| etc... | |||||||||
| 10 | 13 | 26 | 31 | 38 | 47 | 53 | 59 | 62 | 87 |
Complexité :
Le nombre d'opérations effectuées dans cet algorithme est
fixe.
Le nombre d'opérations est de l'ordre de n*log(n). (logarithme
népérien en base 2)
En ce qui concerne la mémoire, c'est un algorithme
récursif donc un peu de mémoire. Cela dépend de la
taille du tableau en partie.
|
|