Code source du tri "casiers"
void tri_casier(int tableau[],int longueur)
{
int min, max, i, longueur2, compt;
int *tableau2;
//recherche des valeurs min et max
min=tableau[0];
max=min;
for(i=1;i<longueur;i++)
{
if (tableau[i]<min) min=tableau[i];
if (tableau[i]>max) max=tableau[i];
}
//on construit le tableau intermédiaire
longueur2=max-min+1;
tableau2=malloc(longueur2*sizeof(int));
//on initialise le tableau à 0
for(i=0;i<longueur2;i++) *(tableau2+i)=0;
//on compte le nombre d'occurences de chaque entier
for(i=0;i<longueur;i++) (*(tableau2+(*(tableau+i))-min))++;
compt=0;
for(i=0;i<longueur2;i++)
{
while(*(tableau2+i)>0)
{
tableau[compt]=min+i;
(*(tableau2+i))--;
compt++;
}
}
free(tableau2);
}