/* Programme qui trie les éléments d'une liste d'entiers  (tri à bulle) */
/* Fait par MM le 01/09/99                                              */
/* Dernière mise à jour : 07/09/2000                                    */

#include<stdio.h>

int main()
{

/* DECLARATION DES VARIABLES */

/* Liste des Ui*/
int *iTableau=NULL;
/* Nombre d'élements dans la liste */
int iNb_elements ;
/* Un compteur pour la boucle allant du début à la fin */
int iCompteurDebut;
/* Un compteur pour la boucle allant de droite à gauche */
int iCompteurFin;
/* Une variable temporaire pour l'échange de deux éléments */
int iEchange;

/* CORPS DU PROGRAMME */

/* Saisie des éléments de la liste */
printf("Nombre d'éléments dans la liste :");
scanf("%d", &iNb_elements);
iTableau=(int*)malloc(iNb_elements*sizeof(int));

for(iCompteurDebut=0; iCompteurDebut<iNb_elements; iCompteurDebut++)
 {
   /* Affichage d'un message demandant la valeur de Ui */
   /* avec i incrementé à chaque passage de la boucle  */
   printf("Saisissez la valeur de U%d\n",iCompteurDebut);

   /* Saisie de la valeur de Ui */
   scanf("%d",&iTableau[iCompteurDebut]);
 }

/* Pour tous les éléments de la liste de gauche à droite */
for(iCompteurDebut =0;iCompteurDebut <iNb_elements;iCompteurDebut ++)
 {
   /* Pour tous les éléments à partir du dernier */ 
   /* jusqu'au dernier élément trié              */
  for(iCompteurFin =iNb_elements-1; iCompteurFin >iCompteurDebut; iCompteurFin --)
   {
     /* Si l'élément courant est plus petit que  */
     /* l'élément précédent       */
     if (iTableau[iCompteurFin] < iTableau[iCompteurFin-1])
     /* ou if (iTableau[iCompteurFin] > iTableau[iCompteurFin-1])
        si on veut l'ordre décroissant */
      {
        /* Alors, on échange les éléments */
        iEchange = iTableau[iCompteurFin];
        iTableau[iCompteurFin] = iTableau[iCompteurFin-1];
        iTableau[iCompteurFin-1] = iEchange;
      }
    }
 }

/*Affichage de la liste */
printf("La liste après tri est la suivante : \n");
for(iCompteurDebut =0; iCompteurDebut <iNb_elements-1; iCompteurDebut ++)
 {
        printf("%d, ",iTableau[iCompteurDebut]);
 }
printf("%d\n ",iTableau[iNb_elements-1]); 
free(iTableau);
}

