Code source du tri par "creation"

int position_suivant(int *tableau, int longueur, int position_dernier, int maxi)
    {
    int i;
    int valeur_dernier=tableau[position_dernier];
    int position_suivant=-1;
    int valeur_suivant=maxi;

    for(i=0;i<longueur;i++) //parcours du tableau pour rechercher la valeur suivante
        {
        if(tableau[i]==valeur_dernier && i>position_dernier)
            {
            return(i); //la valeur suivante est égale à la valeur du dernier élément trouvé
            }
        if(tableau[i]>valeur_dernier && tableau[i]<valeur_suivant)
            { //on a trouvé une valeur qui pourrait être la suivante
            valeur_suivant=tableau[i];
            position_suivant=i;
            }
        if(tableau[i]==maxi && position_suivant==-1)
            { //on a trouvé le plus grand élément du tableau
            //s'il n'y a pas d'élément suivant, la position de l'élément suivant est la position du dernier élément
            position_suivant=i;
            }
        }
    return(position_suivant);
    }

void tri_creation(int *tableau_source, int *tableau_destination, int longueur)
    {
    int i;
    int position_dernier=0;
    int mini=tableau_source[0];
    int maxi=tableau_source[0];

    //recherche du plus petit et du plus grand élément du tableau
    //recherche de la position du plus petit élément (phase d'initialisation)
    
    for(i=1;i<longueur;i++)
        {
        if (tableau_source[i]<mini)
            {
            position_dernier=i;
            mini=tableau_source[i];
            }
        else if (tableau_source[i]>maxi)
            {
            maxi=tableau_source[i];
            }
        }
    tableau_destination[0]=mini; //on place le premier élément du tableau destination

    for(i=1;i<longueur;i++)
        {
        position_dernier=position_suivant(tableau_source,longueur,position_dernier,maxi); //recherche de la position de l'élément suivant
        if(position_dernier!=-1) //si on a trouvé la position de l'élément suivant
            {
            tableau_destination[i]=tableau_source[position_dernier]; //on place cet élément dans le tableau destination
            }
        else //on a pas trouvé la position de l'élément suivant
            { //on soupçonne donc une erreur
            printf("Erreur dans le triParCreation, l'un des éléments a été perdu !!!");
            }
        }        
    }