begin process at 2012 05 29 08:38:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

Heapsort


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Heapsort

dimanche 1 février 2009 à 13:17:19 | Heapsort

Striders77

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;
}
dimanche 1 février 2009 à 14:35:30 | Re : Heapsort

Chouchou182

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.
--
Chouchou.



Cette discussion est classée dans : int, fils, pere, nbel, pdeb


Répondre à ce message

Sujets en rapport avec ce message

Communication entre pere et fils [ par anek971 ] Bonjour, Je dois actuellement codé un petit programma a priori simple sous linux. Il s'agit de faire un programme client serveur avec le client qui e tuer createProcess api c [ par tanaka13 ] bonjour à tous, voila mon probleme je debute avec les api en c et je suis largué. Je viens juste de renvoyer des parametres d'une fenetre console pe Signaux [ par manta7 ] Bonjour je dois faire un programme qui crée 2 fils, envoie SIGUSR1 au fils 1, qui le renvoie au pere, qui le renvoie au fils 2 etc..j'ai tenté ça mais Communiquer entre processus avec des pipe [ par akrogames ] Bonjour, Je souhaite réaliser un programme pour m'entrainer à créer des anneaux avant de passer à la programmation socket. Mon objectif : faire pass fork: communication entre pere et fils [ par nezdeboeuf62 ] Pour faire un chat, j'ai un programme qui contient une map (librairie STL, template).Bien sur cette map evolue regulierement.Le probleme c'est que apr Polymorphisme et surcharge d'opérateur [ par blh_ind ] Bonjour à tous. Probleme de polymorphisme, je vais pété un plomb Question : comment obtenir = Fils à l'étape 4 5 7 8 sans caster. Execution - récuperation de l'etat d'un processus [ par Spy63 ] J'ai un programme en C systeme que j'ecrit sous vi pour linux dans lequel:-j'ai un pere et deux fils.-Mon but et d'atendre que les fils soit en pause La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ] bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n Variable global et processus [ par obasileus ] Salut j'ai un programme comportant 4 processus fils qui lancent chacun 4 threads qui gèrent 2 problemes producteur/consom. Le processus pere à besoin comment envoyer un signal du pere au fils pour faire un traitement [ par facilus ] Bonjour,je voudrai faire un programme qui crée un processus fils qui affiche un message quand il reçoit lesignal SIGUSR1 du processus père.merci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales