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 :

Problème Merge Sort


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut Problème Merge Sort
    Bonsoir à tous,

    J'ai un petit soucis avec ma fonction de tri par fusion.
    Mon programme lit un fichier texte et crée une liste chainée double.

    Voila mes structures:
    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
     
    struct DATA{
       int taille;
       struct DATA2 *first;
    };
    struct DATA2{
       char nom[15];
       char prenom[15];
       char initial[10];
       char email[35];
       char num_tel[10];
       char classe[15];
       int taille;
       struct DATA2 *next;
       struct DATA2 *previous;
    };
    typedef struct DATA2 ELEVE;
    typedef struct DATA LISTE;
    Le problème est que lorsque je choisi de trier par nom, cela trie parfaitement mais lorsque je trie par prénom, cela ne trie pas correctement... une idée??

    Voici ma fonction de tri par fusion:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    ELEVE *Tri_Fusion(ELEVE *list1)
    {
        ELEVE *list2=NULL;
        if (list1 == NULL) return NULL;
        else if (list1->next == NULL) return list1;
        else
        {
            list2 = Split_List(list1);
            if(valeur==1) return Fusion(Tri_Fusion(list1),Tri_Fusion(list2));
            if(valeur==2) return Fusion2(Tri_Fusion(list1),Tri_Fusion(list2));
        }
        return list1;
    }
    ELEVE *Fusion(ELEVE *list1, ELEVE *list2)
    {
        if (list1 == NULL) return list2;
        else if (list2 == NULL) return list1;
        else if (strcmp(list1->nom,list2->nom) < 0)
        {
            list1->next = Fusion(list1->next, list2);
            list1->next->previous=list1;
            list1->previous=NULL;
            return list1;
        }
        else
        {
            list2->next = Fusion(list1, list2->next);
            list2->next->previous=list2;
            list2->previous=NULL;
            return list2;
        }
    }
    ELEVE *Fusion2(ELEVE *list1, ELEVE *list2)
    {
        if (list1 == NULL) return list2;
        else if (list2 == NULL) return list1;
        else if (strcmp(list1->prenom,list2->prenom) < 0)
        {
            list1->next = Fusion(list1->next, list2);
            list1->next->previous=list1;
            list1->previous=NULL;
            return list1;
        }
        else
        {
            list2->next = Fusion(list1, list2->next);
            list2->next->previous=list2;
            list2->previous=NULL;
            return list2;
        }
    }
    ELEVE *Split_List(ELEVE* list1)
    {
        ELEVE *list2=NULL;
     
        if (list1 == NULL) return list1;
        else if (list1->next == NULL) return list1->next;
        else {
            list2 = list1->next;
            list1->next = list2->next;
            list2->next = Split_List(list2->next);
            return list2;
        }
    }
    J'ai une variable globale "valeur" qui lorsqu'elle prend l'entier 1 , utilise la fonction "Fusion" pour un tri par nom et l'entier 2, pour un tri par prénom.
    Les fonctions "Fusion" et "Fusion2" sont identiques sauf le strcmp() est dans l'un pour comparer les noms et dans l'autre pour comparer les prénoms, donc je ne vois vraiment pas où peut être l'erreur...




    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut
    Je viens de résoudre mon problème, merci quand même et bonne soirée.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Puisque nous sommes sur un forum, si quelqu'un à le même problème, il sera content de savoir comment tu l'as résolu.

    Peux-tu nous en dire plus?

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

Discussions similaires

  1. Problème PlugOut Sort
    Par slopez dans le forum BOUML
    Réponses: 7
    Dernier message: 23/12/2008, 22h16
  2. problème avec sort() et operator<
    Par [Hugo] dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2008, 18h19
  3. Problème de sort de vectors..
    Par strayyy dans le forum SL & STL
    Réponses: 13
    Dernier message: 05/01/2008, 04h36
  4. problème évènement sorting
    Par babafredo dans le forum ASP.NET
    Réponses: 5
    Dernier message: 04/07/2007, 09h32
  5. Problème avec Sort() sur un TList
    Par ViNzZz dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/08/2006, 14h45

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