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 :

Algorithme de tri par tas


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut Algorithme de tri par tas
    Salut à tous,
    je viens vous soumettre un problème que j'ai avec le code de l'algorithme de TRI DE TAS qui ne marche pas,
    Je vous présente les fonctions que j'ai écrites :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    void permutation(int tab[],int i, int j)
    {
    	int temp = 0;
    	temp = tab[i];
    	tab[i]=tab[j];
    	tab[j]=temp;
    }
     
    void tamiser(int tab[], int noeud, int n)
    {
    	int k = noeud;
    	int j = 2*k;
    	while(j<=n)
    	{
    		if (j<n && tab[j]<tab[j+1])
    		{
    			j++;		
    		}
    		if (tab[k]<tab[j])
    		{
    			permutation(tab,k,j);
    			k = j;
    			j = 2*k;
    		}
    		else return;
     
    	}
     
    }
     
    void tri(int tab[], int n)
    {
    	for (int i = n/2; i>0;i--)
    	{
    		tamiser(tab,i,n);
    	}
    	for (int i=n; i>1;i-- )
    	{
    		permutation(tab,i,1);
    		tamiser(tab,1,i);
    	}
     
    }
    La fonction tamiser effectue l'étape préliminaire de rangement des éléments du tableau dans l'arbre; La fonction tri est celle qui est censée réaliser le tri final ,

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Il y a 2 problèmes
    • Dans la procédure tri dans la 2ième boucle c'est i-1. Donc tamiser(tab,1,i-1);. Ici i pointe sur la première case à partir de laquelle le tableau est trié.
    • Tu est sensé savoir qu'en C, les tableaux commencent par l'indice 0. Donc avec ta boucle for (int i = n/2; i>0;i--) tu oublies de tamiser la première cas du tableau (la racine du tas). De même permutation(tab,i,1); tu ne permutes pas la racine du tas qui contient la valeur la plus élévée du tas.


    Code à tester
    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
    void tri(int tab[], int n)
    {
    	if (n <= 1) return;
     
    	for (int i = n/2; i>=0;i--)
    	{
    		tamiser(tab,i,n);
    	}
    	for (int i=(n-1); i>0;i-- )
    	{
    		permutation(tab,i,0);
    		tamiser(tab,0,i-1);
    	}
     
    }
    PS: La condition i>=0de ma première boucle je la trouve moche comme tout
    Peut-être faire l'algo avec les indices [1, n] mais réajuster cela pendant les permutations ou les tests d'égalité.


    Sinon ton code est moche , mais bon ce n'est pas trop grave: trop de variable i, j, k (remplace par fils1, fils2, father, pos), tu peut initialiser temp directement au lieu de d'abord l’initialiser à 0, et tu déclares 2 fois une variable i pour tes boucles

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Merci chef

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programme en c "tri par tas"
    Par lyna191 dans le forum C
    Réponses: 3
    Dernier message: 28/12/2017, 11h44
  2. Programmation du tri par tas
    Par henry.delapub dans le forum C++
    Réponses: 6
    Dernier message: 26/03/2010, 16h11
  3. Programme de tri par tas
    Par charafzizou dans le forum C++
    Réponses: 2
    Dernier message: 05/01/2010, 10h37
  4. algorithme de tri par comptage
    Par charrynsasi dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 10/10/2008, 13h20

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