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