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);
    }