Algorithme (partiel) du tri à bulle

La condition de sortie de l'itérative est qu'il n'y a pas eu de permutation à la dernière itération. La variable booléenne permutation
est ce qu'on appelle un drapeau. Un drapeau est une variable booléenne (TRUE ou FALSE) qui va servir à marquer un événement particulier dans un algorithme (le "drapeau est levé" pour prévenir d'un événement), dans ce cas la variable booléenne est égale à TRUE. Le drapeau peut augmenter aussi la lisibilité des programmes lorsqu'il y a beaucoup de tests à faire (dans des itératives ou des alternatives)
.

Variables en entrée:
    int tailleTab = 10;
    int tab[tailleTab]={45,25,3,122,345,12,26,89,1,7}; /* tableau entièrement initialisé */
    int nbEffectif = 10;
Variables auxiliaires:
    int indTab;           /* indice du tableau pour les comparaisons  succéssive dans l'itérative */
    int elemTemp;   /* sert pour la permutation */
    int debTab;          /* condition d'arrêt pour un passage (le premier élément non trié du tableau) */
    bool permutation;  /* drapeau qui indique s'il y a eu permutation ou non */
Corps de l'algorithme détaillé:
debTab = 0;
do                  
/* On fait au moins une fois l'itération  */
   {
     indTab = nbEffectif - 1;  
   /* on part du dernier élément du tableau */

     permutation = FALSE;  
   /* pas de permutation pour l'instant */
     while (indTab > debTab)
  /* on parcourt tout le tableau qui reste à trier */  
         {
           if (tab[indTab] < tab[indTab - 1])    
             {
              elemTemp = tab[indTab - 1];          
/* on permute */
              tab[indTab - 1] = tab[indTab];
              tab[indTab] =  elemTemp;
              permutation = TRUE;      
/* il y a eu une permutation (drapeau levé)*/
             } /* fin du if */
           indTab = indTab -1;
         }
/* fin du while */
   
debTab = debTab + 1;        /* Passage suivant tab[debTab] est trié, on passe au suivant */
    }
while (permutation) ;            
/* tant qu'il y a eu une permutation */
/* fin du do ..while */
for (indTab=0; ind<nbEffectif; i++)
     afficher(" ", tab[ind]);
/* afficher les éléments  du tableau */
suivant     plan