Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction "tri" !!

Je comprend pas !!

Sujet résolu
    23 août 2006 à 19:23:56

    Voici la fonction "tri :

    void ordonnerTableau(long tableau[], long tailleTableau)
    {
        long i, j, buffer;
        for(j=0; j<tailleTableau ; j++)
        {
            for(i=0; i<(tailleTableau-1) ; i++)
            {
                 buffer=0;
                 if(tableau[i]>tableau[i+1])
                    {
                        buffer=tableau[i];
                        tableau[i]=tableau[i+1];
                        tableau[i+1]=buffer;
                    }
            }
        }     
    }


    Je comprend pas pouquoi on fait deux boucles ? Et pourquoi il y en a une avec "<tailleTableau" et l'autre avec "i<(tailleTableau-1)" ? C'est quoi la différance et c'est pour quoi faire ??

    Merci d'avance pour vos réponce !
    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2006 à 19:49:31

      Le nom j n'est pas explicite,
      en fait la première boucle sert à recommencer la deuxième jusqu'à ce que le tableau soit trié .

      Le première va de 0 à tailleTableau (non compris) car imagine que l'élément le plus grand soit en premier dans la liste, avec ce code, il faudra tailleTableau-1 étape pour le rammener à sa vrai position .
      La deuxième boucle va de 0 à tailleTableau-1(non compris) car tu index avec i et i+1
      Or ton tableau ne peut être indexé que de 0 à tailleTableau-1(compris)
      donc si i=tailleTableau-2(le maximum), alors i+1=tailleTableau-1
      donc on ne dépasse pas les limites du tableau
      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2006 à 19:58:51

        J'ai pas tout comprit !! Tu pourais me le respliquer en imagimant que le tableau fait 4 case memoire ! Merci d'avance.
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2006 à 21:03:17

          Imaginons le pire cas avec 4 cases, on veut trier par ordre croissant:
          liste={9,5,3,1};
          Avec ton algorithme on va considérer la liste dans l'ordre croissant et pour chaque paire, on inverse les éléments si le premier ets plus grand que le second .
          Ce qui donne(on fait étape par étape):
          liste={9,5,3,1}
          ********^-^ on inverse(9>5)
          liste={5,9,3,1}
          **********^-^ on inverse(9>3)
          liste={5,3,9,1}
          *************^-^ on inverse(9>1)
          liste={5,3,1,9}
          Donc on appliquer l'équivalent de ta dexièmz boucle mais la liste n'est pas triée donc on recommence:
          liste={5,3,1,9}
          ********^-^ on inverse(5>3)
          liste={3,5,1,9}
          **********^-^ on inverse(5>1)
          liste={3,1,5,9}
          *************^-^ on inverse pas(5<9)
          Donc on a fait une fois de plus la deuxième boucle mais la liste n'est pas triée donc on recommence:
          liste={3,1,5,9}
          ********^-^ on inverse(3>1)
          liste={1,3,5,9}
          **********^-^ on inverse pas(3<5)
          liste={1,3,5,9}
          *************^-^ on inverse pas(5<9)
          Donc la liste est triée .
          Regardons combien de fois on a exécuté la deuxième boucle:
          liste_initiale={9,5,3,1}
          liste_(1)={5,3,1,9}
          liste_(2)={3,1,5,9}
          liste_(3)={1,3,5,9}
          Donc en 3 étape on a finis le pire cas . Or 3=4-1=TailleTableau-1 !!!
          Donc on pire on exécute la deuxième boucle (TailleTableau-1) fois .
          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2006 à 21:18:43

            Ah oké, j'ai déjà mieu comprit, merci !!!
            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2006 à 21:32:27

              Enfin c'est un algo de tri long :p
              Tu peux chercher d'autre méthode mais alors là c'est plus dur :( .
              • Partager sur Facebook
              • Partager sur Twitter
                23 août 2006 à 21:58:55

                Oui, çà c'est le tri bulle non optimisé, le pire imaginable .
                Après il faut bien comprendre la récursivité et avoir un peu d'imagination pour trouver mieux .
                • Partager sur Facebook
                • Partager sur Twitter

                Fonction "tri" !!

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown