c'est un code simple pour trier une table de max à min. Je suis confus car mon professeur a utilisé for (i = 0; i et j'ai vu que cela fonctionne bien avec for (i = 0; i . Quelqu'un peut-il me dire la différence?
Merci pour votre temps, appréciez votre aide. int a[10];
int i, j, t;
for(i=0; i<10; i++)
{
scanf("%d", &a[i]);
}
for(i=0; i<10-1; i++)
{
for(j=i+1; j<10; j++)
{
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0; i<10; i++)
{
printf("%d\n", a[i]);
}
3 Réponses :
Votre professeur a raison, bien que votre méthode fonctionne aussi; c'est juste plus maladroit:
Etant donné que la valeur de départ de j est i + 1 , afin d'éviter un accès hors limites au tableau a ( dont le comportement est indéfini ), vous devez contraindre i à être inférieur à 9 et i + 1 à être inférieur à 10. Essentiellement votre professeur contraint le premier, mais vous contraignez le second.
Le tri par bulles fonctionne de cette manière car le tri est établi une fois que la boucle externe a traité l'avant-dernier élément.
Conversion de mon commentaire:
Habituellement, ces types d'algorithmes ne s'arrêtent pas au dernier, mais à un élément avant. En fait, à ce stade, le nième-1 élément est déjà trié par rapport au nième. Donc, les deux fonctionnent, mais le "-1" est plus efficace car vous sautez une itération inutile.
Dans le cas de for (i = 0; i <10; i ++) vous obtenez une itération supplémentaire de la boucle externe, dans laquelle i est égal à 9 . Mais alors dans la boucle interne j est égal à 10 à la fois, la condition j <10 n'est pas remplie et la boucle interne se termine sans s'exécuter son corps.
Ayez un vote favorable. Vous avez obtenu la réponse correcte la première fois (contrairement à moi).
Habituellement, ces types d'algorithmes ne s'arrêtent pas au dernier, mais à un élément avant. En fait, à ce stade, le nième-1 élément est déjà trié par rapport au nième. Donc, les deux fonctionnent, mais le "-1" est plus efficace car vous sautez une itération inutile.