précédent | suivant | table des matières

Le tri par remontée des bulles.

voir l'appliquette de visualisation

L’idée consiste à comparer deux éléments adjacents, et à les échanger s’ils ne sont pas dans l’ordre. Lorsqu’on réalise un passage, on range le plus grand élément en fin de tableau ( ou le plus petit en début ). On a donc réalisé une partition entre l’élément le plus grand d’une part, et tous les autres éléments d’autre part.

void triBulles1(int t[]){
   for (int i=t.length-1; i>=0; --i)
      for (int j=0; j<i; ++j)
        if (t[j+1] < t[j]) { // comparer deux voisins
          int tmp = t[j];    // les échanger si nécessaire
          t[j] = t[j+1];
          t[j+1] = tmp;
        }
} 

L’algorithme est clairement en un nombre de comparaisons de l’ordre de , il n’est pas de bonne qualité, et pratiquement c’est même le plus mauvais tri.

On peut tenter d’accélérer l’algorithme en constatant que si le dernier échange se produit à l’indice dernierEchange, alors tous les éléments compris entre dernierEchange et i sont en ordre et à leur place.

void triBulles2(int t[]){
   int dernierEchange;
   for(int i=t.length-1; i>=0; ){
      dernierEchange = -1;
      for (int j=0; j<i; j++)
        if (t[j+1] < t[j]) { // comparer deux voisins
          int tmp = t[j];    // les échanger si nécessaire
          t[j] = t[j+1];
          t[j+1] = tmp;
          dernierEchange = j;
        }
      i = dernierEchange;
   }
} 

haut de la page