2
votes

Boucle for spécifique pour un algorithme de tri simple

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

c

1 commentaires

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.


3 Réponses :


1
votes

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.


0 commentaires

1
votes

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.


0 commentaires

1
votes

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.


1 commentaires

Ayez un vote favorable. Vous avez obtenu la réponse correcte la première fois (contrairement à moi).