Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tri par paternité ( heap_sort )

problème de tri...

    23 janvier 2007 à 14:37:52

    Bonjour à tous, j'ai un problème avec mon tri... il ne trie pas et il m'affiche toujours comme dernière valeur n'importe quoi...

    Pouvez vous m'aider SVP merci beaucoup.

    Bien à vous.

    Voici le code: ( mon problème se trouve dans les 2 dernières fonctions.

    #include <stdio.h>
    #define MAX 50

    void encodage(int, int *);
    void affichage(int, int *);
    void heap_sort(int *, int);
    void paterner(int *, int, int);

    void main()
    {
            int nbel, vec[MAX];
            char rep;

            do
            {
                    /* condition pour entrer le nombres de valeurs entre 0 et 50 */

                    do
                    {
                            printf("entrez le nombre de lignes \t");
                            fflush(stdin);
                            scanf("%d",&nbel);

                    }while(nbel < 0 || nbel > MAX);

                    printf("\n ");
                    printf("\n ");
           
                    /* condition pour NBEL ( si plus grand que 0 on encode le vecteur,
                 on affiche le vecteur encodé et on affiche le vecteur trié.*/


                    if(nbel > 0)
                    {
                            /* encodage de la matrice */

                            printf("ENCODAGE DE LA MATRICE \n");

                            printf("\n ");

                            /* appelle de la fonction encodage */

                            encodage(nbel, &vec[0]);
                   
                            printf("\n ");
                            printf("\n ");

                            /* affichage du vecteur */
           
                            printf("AFFICHAGE DU VECTEUR \n");

                            printf("\n ");

                            /* appelle de la fonction d'affichage */

                            affichage(nbel, &vec[0]);
           
                            /* appelle de la fonction de tri */

                            printf("\n ");
                            printf("\n ");

                            heap_sort(& vec[0], nbel);

                            printf("\n ");
                            printf("\n ");

                            /* affichage du vecteur trié */
           
                            printf("AFFICHAGE DU VECTEUR TRIE \n");

                            printf("\n ");

                            /* appelle de la fonction d'affichage */

                            affichage(nbel, &vec[0]);

                            printf("\n ");
                            printf("\n ");
           
                    }

                    /* condition pour quand NBEL = 0, on affiche les points suivant*/

                    else
                    {
                            printf("IMPOSSIBLE D'ENCODER LE VECTEUR, CAR LE NOMBRE DE VALEURES EST ''0'' ");

                            printf("\n ");
                            printf("\n ");

                            printf("IMPOSSIBLE D'AFFICHER LE VECTEUR, CAR AUCUNE VALEURES ONT ETE ENTREES");

                            printf("\n ");
                            printf("\n ");

                            printf("IMPOSSIBLE D'AFFICHER LE VECTEUR TRIE, CAR AUCUNE VALEURES ONT ETE TRIEE");     
                    }

                    printf("\n ");
                    printf("\n ");
                    printf("****************************\n");
                    printf("Voulez vous recommencer ??? \n");
                    printf("****************************\n");
            printf("\n ");

                    printf("Tapez 'o' pour OUI ou 'n' pour NON");
                    printf("\n ");
                    fflush(stdin);
                    scanf("%c",&rep);
                    printf("\n ");
           
            }while(rep == 'o');
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               vec[0] ( adresse de la case 0 du vecteur )*
     *                                                   *
     * process : encodage du vecteur                     *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void encodage(int l, int *pvec)
    {
            int i = 0;

            for(i = 0; i < l; i++)
            {
                    printf("valeure [%d] est : \t",i + 1);
                    fflush(stdin);
                    scanf("%d", pvec);
                    pvec++;
            }
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               vec[0] ( adresse de la case 0 du vecteur )*
     *                                                   *
     * process : affiche le contenu du vecteur           *
     *                                                   *
     * output : /                                        *
     *****************************************************/



    void affichage(int l, int *pvec)
    {
            int i = 0;

            for( i = 0; i < l; i++)
            {
                    printf("%d \t",*pvec);
                    pvec++;
            }
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               vec[0] ( adresse de la case 0 du vecteur )*
     *                                                   *
     * process : trie le vecteur en appelant la fonction *
     *           paterner                                *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void heap_sort(int *vec, int nbel)
    {
            int i = 0, temp = 0;
           
            i = nbel /2;

            while(i >= 1)
            {
                    paterner(&vec[0], nbel, i);
                    i = i - 1;
                    vec++;
            }

            i = nbel;

            while(i > 1)
            {
                    temp = *(vec + 1);
                    *(vec + 1) = *(vec + i);
                    *(vec + i) = temp;

                    i = i -1;

                    paterner(&vec[i], i, 1);
                    vec++;
            }
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               vec[0] ( adresse de la case vecteur qu'on)*
     *         lui donne.                                *
     *         ipere (la valeur la plus grande)          *
     *                                                   *
     * process : met les fils et les peres à la bonne    *
     *           place. jusqu'a ce que il n'y ai plus de *
     *           fils qui soient plus grand que leur pere*
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void paterner(int *vec, int nbel, int ipere)
    {
            int ifils, temp = 0;

            ifils = ipere * 2;

            while(ifils <= nbel)
            {
                    if( ifils < nbel && *(vec + ifils) < *(vec + ifils + 1) )
                    {
                            ifils = ifils + 1;
                    }
                    if( *(vec + ifils) > *(vec + ipere) )
                    {
                            temp = ifils;
                            ifils = ipere * 2;
                            ipere = temp;
                    }
                    else
                    {
                            ifils = nbel + 1;
                    }

                    vec++;

            }
    }
    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2007 à 18:18:01

      Salut jitalia,

      j'ai remarqué cette erreur de frappe (qui ne résoud peut-être pas tout...) :

      [...]
      /* appelle de la fonction de tri */

                    printf("\n ");
                    printf("\n ");

                    heap_sort(& vec[0], nbel); // <- ...&vec

                    printf("\n ");
                    printf("\n ");
      [...]

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2007 à 18:28:53

        je vais essayer :) je dirais quoi :D:D Merci beaucoup :p
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2007 à 18:44:44

          Ceci pourra peut-être t'aider (là*).

          * il y a des codes en exemple, en bas à gauche;
          • Partager sur Facebook
          • Partager sur Twitter

          Tri par paternité ( heap_sort )

          × 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