1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #include <stdlib.h>
#include <stdio.h>
/*
* Alloue la mémoire nécessaire à notre tableau
*/
void init(char **t,int n)
{
*t = (char *) malloc(n*sizeof(char));
}
/*
* Libère l'espace mémoire réservé au tableau
*/
void liberer(char **t)
{
free(*t);
*t = NULL;
}
/*
* Récupère nos n valeurs dans le tableau
*/
void recuperer(int n,char **t)
{
int i=0;
char c;
for(;i<n;i++)
{
printf("t[%d]=",i);
scanf("%c",&(*t)[i]);
while(getchar() != '\n'); /* Vide le flux en entrée */
}
}
/*
* Tri les valeurs selon l'algorithme désiré
*/
void tri(char **t,int n)
{
int i,j,k;
char x;
for(i=0;i<n;i++)
{
x=(*t)[(k=i)];
for(j=i+1;j<n;j++)
if(x>(*t)[j])
x=(*t)[(k=j)];
if(k!=i)
{
(*t)[k]=(*t)[i];
(*t)[i]=x;
}
}
}
/*
* Affiche les valeurs
*/
void affiche(char *t,int n)
{
int i=0;
for(;i<n;i++)
printf("t[%d]=%c\n",i,t[i]);
}
int main(void)
{
char c; /* Une variable qui servira à vider le buffer d'entrée */
char *t; /* Le tableau qui va contenir les char */
int n; /* Le nombre d'éléments attendus */
printf("Combien y a-t-il de nombres a trier?\n> ");
scanf("%d",&n); /* On reçoit le nombre de valeurs à trier */
while(getchar() != '\n'); /* Le flux entrant a toujours au moins un \n, on doit le récupérer pour vider le flux afin d'assurer le fonctionnement correct du prochain scanf */
init(&t,n);
printf("Entrez les nombres:\n");
recuperer(n,&t);
tri(&t,n);
printf("Après tri:\n");
affiche(t,n);
liberer(&t);
return 0;
} |
Partager