IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Pourquoi dans ce tri a bulle ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut Pourquoi dans ce tri a bulle ?
    Bonjour a tous

    Pourquoi dans ce code il tri correctement sauf le 1er chiffre?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void ordonnerTableau(long tableau[], long tailleTableau);
     
    int main(int argc, char *argv[])
    {
        long tableau[10] = {2, 4, 3, 1, 15, 6, 9, 16, 19, 12};
        long i = 0;
     
        ordonnerTableau(tableau, 10);
     
        for(i = 0; i < 10; i++)
        {
            printf("%ld\n", tableau[i]);
        }
     
        return 0;
    }
     
     
    void ordonnerTableau(long tableau[], long tailleTableau)
    {
        long i, a = 0;
     
         for(i = 0; i < tailleTableau-1; i++)
            {
                if(tableau[i] > tableau[i+1])
                {
                    a = tableau[i+1];
                    tableau[i+1] = tableau[i];
                    tableau[i] = a;
                    i = 0;
                }
            }
     
    }
    résultat :

    2
    1
    3
    4
    6
    9
    12
    15
    16
    19

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le problème vient du i = 0 dans la boucle for.
    En effet, une boucle for c'est for(init, condition, iteration) {code}

    Qui donne à l'execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    init
    while(condition) {
       code
       iteration
    }
    Si ton code met i à 0, l'itération la passera à 1.

    Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void ordonnerTableau(long tableau[], long tailleTableau)
    {
        long i, a = 0;
        for(i = 0; i < tailleTableau-1; i++) {
            if(tableau[i] > tableau[i+1]) {
                a = tableau[i+1];
                tableau[i+1] = tableau[i];
                tableau[i] = a;
                i = -1;
            }
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci mabu.. c'est compris..

    Est que cette méthode est déconseillé ou pas?

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par lassault1 Voir le message
    Est que cette méthode est déconseillé ou pas?
    Dans la mesure où tu comprends ce que tu fais, il n'y a aucun problème.

    Pour un tri, il peut paraitre plus logique de passer par un booléen et une boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /* le tableau est il trié ?*/
    int tableau_trie = 0; 
     
    /* tant que le tableau n'est pas trié, on le trie */
    while( !tableau_trie) {
        /* reset du booléen */
        tableau_trie = 1;
        /* parcourt et tri (identique à ton code, sauf qu'on remplace i = -1 par tableau_trie = 0;*/
        for(i = 0; i < taille-1; ++i) {
           if(tableau[i] > tableau[i+1]) {
              /* échanger i et i+1 */
              ...
              /* on indique que le tableau n'est pas trié*/
              tableau_trie = 0;
           }
        }
    }

Discussions similaires

  1. UML : Qui s'en sert ? Pourquoi ? Dans quels cas ? Où ?
    Par Matthieu Brucher dans le forum UML
    Réponses: 83
    Dernier message: 10/06/2013, 16h13
  2. Problème dans un tri de tableau
    Par pmboutteau dans le forum ASP
    Réponses: 5
    Dernier message: 29/11/2005, 13h12
  3. Perdu dans mon tri...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/10/2005, 21h38
  4. [Syntaxe] Un return dans un try... Comment faire ?
    Par chuky dans le forum Général Java
    Réponses: 13
    Dernier message: 14/01/2005, 10h33
  5. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo