Heapsort

Striders77 Messages postés 1 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 1 février 2009 - 1 févr. 2009 à 13:17
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 - 1 févr. 2009 à 14:35
Bonjour,

Je dois programmer la fonction HEAPSORT en C et j'ai beacoup de mal avec l'algorythme. Si quelqu'un sait jeter un coup d'oeil...

Merci d'avance.

#include <stdio.H>
#include <conio.H>
#include <stdlib.h>
#include <time.h>

void fsaisie(int *,int);
void faffiche(int *, int);
void heapsort(int *,int *,int *, int *,int , int , int *, int *,int);
void paterner(int *, int *, int * ,int *, int , int , int *, int *,int );

void main()
{
    int vec[50],nbel,*pdeb,*pfin,*pere,*fils,j,*perebis,*filsbis,i=0;
    srand(time(NULL));

    do
    {
        printf("\n\n\t Entrer le nombre d elements du premier vecteur : \t");
        fflush(stdin);
        scanf("%d",&nbel);
    }while(nbel<0 || nbel>50);
   
    pdeb=&vec[0];
    pfin=&vec[nbel-1];

    fsaisie(pdeb,nbel);

    printf("\n\n\t Vecteur : ");

    faffiche(pdeb,nbel);

    printf("\n\n\t Vecteur heapsort : ");

    if(nbel%2==0)
    {
        j=0;

        pere=&vec[(nbel-1)/2];
        fils=&vec[nbel-1];

        perebis=pere;
        filsbis=fils;

        printf("%d=fils pere=%d",*fils,*pere);
        getch();
    }
    else
    {
        j=1;

        pere=&vec[(nbel-2)/2];
        fils=&vec[nbel-2];
       
        perebis=pere;
        filsbis=fils;
    }

    heapsort(pdeb,pfin,pere,fils,nbel,j,perebis,filsbis,i);

    faffiche(pdeb,nbel);
}

/*
    Input : Adresse de début du vecteur, nombres d'éléments du vecteur.
   
    Process : Saisie des éléments du vecteur.
*/

void fsaisie(int *pdeb,int nbel)
{
    int i=0,choix;

    do
    {
        printf("\n\n\t Pour entrer les nombres : - manuellement, tapez 0 \n\n\t\t\t\t - aleatoirement, tapez 1.");
        fflush(stdin);
        scanf("%d",&choix);
    }while(choix<0 || choix>1);

    if(choix==0)
    {
        do
        {
            printf("\n\n\t Entrer la valeur [%d] :\t",i+1);
            fflush(stdin);
            scanf("%d",pdeb);

            pdeb++;
            i++;
        }while(i<nbel);
    }

    if(choix==1)
    {
        for(i=0;i<nbel;i++)
        {
            *pdeb=rand()%20;
            pdeb++;
        }
    }
}

/*
    Input : Adresse de début du vecteur, nombres d'éléments du vecteur.
   
    Process : Affichage des éléments du vecteur.
*/

void faffiche(int *pdeb,int nbel)
{
    int i=0;

    printf("\n\n");

    do
    {
        printf("\t %d",*pdeb);

        pdeb++;
        i++;
    }while(i<nbel);
}

void heapsort(int *pdeb,int *pfin,int *pere,int *fils,int nbel,int j,int *perebis, int *filsbis, int i)
{
    int temp,k;

    for(k=nbel;k>=0;k--)
    {
        paterner(pere,fils,pfin,pdeb,nbel,j,perebis,filsbis,i);   
    }
   
    for(k=nbel;k>=0;k--)
    {
        temp=*pfin;
        *pfin=*pdeb;
        *pdeb=temp;
       
        paterner(pere,fils,pfin,pdeb,nbel,j,perebis,filsbis,i);
    }
}

void paterner(int *pere,int *fils,int *pfin,int *pdeb,int nbel,int j, int *perebis, int *filsbis, int i)
{
    int temp;

        if( *fils < *(fils+1) && fils < pfin)
        {
            fils++;
            i++;
        }
       
        if(*pere<*fils)
        {
            temp=*pere;
            *pere=*fils;
            *fils=temp;

        }
       
        pere--;
        fils=fils-2-i;
}

1 réponse

cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
1 févr. 2009 à 14:35
Salut,
Je n'ai pas trop regardé ton code, mais je trouve que tes fonctions acceptent beaucoup trop de paramètres.
Par exemple, dans la fonction paterner, les paramètres pdeb, nbel, j, perebis et filsbis ne sont pas utilisés.

Je t'invite à t'inspirer de ce wiki et à poser des questions plus précises.
0