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 :

tri d'un tableau à 2 dimensions


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 527
    Points : 215
    Points
    215
    Par défaut tri d'un tableau à 2 dimensions
    Bonjour,
    je chaerche un astuce pour effectuer un tri sur un tableau à 2 dimensions ...
    J'ai bien un bout de code, mais je ne vois pas comment trier sur un élément du tableau .
    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
     
    #include "winproc.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef char * Pchar;
    typedef int (* TFcmp) (const void *p1, const void *p2) ;
    char tmp[8];
    int cmpMot( const void * m1, const void * m2);
    int cmpEntier( const void * pm1, const void * pm2);
     
    void essai_tri (HWND hwnd) {
    	struct { int dt;
    	int mt; } ti[] = { 17, 25, 21, 25, 19, 23};
    int i;
    int nti = sizeof(ti)/sizeof(ti[0]);
    MessageBox(hwnd, itoa(nti,tmp,10), "Taille", MB_OK|MB_ICONEXCLAMATION);
     
    for (i=0; i<nti; i++) 
    MessageBox(hwnd, itoa(ti[i].dt,tmp,10), "Avant Tri", MB_OK|MB_ICONEXCLAMATION);
     
    qsort( ti, nti, sizeof(int), cmpEntier);
     
    for (i=0; i<nti; i++)
    MessageBox(hwnd, itoa(ti[i].dt,tmp,10), "Après Tri", MB_OK|MB_ICONEXCLAMATION);
     
    }
    /*------------------------------------------------------------------*/
    /*                  TRI du Tableau Ordre CROISSANT                  */
    /*------------------------------------------------------------------*/
    int cmpEntier( const void * p1, const void * p2) {
    typedef const int * PEntierConstant;
      PEntierConstant pi1 = (PEntierConstant)p1,
      pi2 = (PEntierConstant)p2;
      return *pi1 - *pi2 ;
    }

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: tri d'un tableau à 2 dimensions
    Citation Envoyé par dede92
    je chaerche un astuce pour effectuer un tri sur un tableau à 2 dimensions
    Déjà, ça me pose un problème. Trier quoi ? Une ligne, une colonne

    Mettons que j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    4 5 1 2
    8 2 3 1 
    3 5 7 4
    Tu veux quoi ?
    çà ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    2 1 4 5
    1 2 3 8
    3 4 5 7
    ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    4 2 1 1
    3 5 3 2
    8 5 7 4
    ou çà ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 1 2 2 
    3 3 4 4 
    5 5 8 7
    etc.

    faut-il éliminer les doublons ?

    Bref, il faut préciser ta question...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 527
    Points : 215
    Points
    215
    Par défaut
    Hello,
    pour etre plus precis,
    dans ma structure
    struct { int valeur1;
    int valeur2; } ti[] = { 17, 25, 21, 25, 19, 23};
    le resultat souhaité serait :
    17 25
    19 23
    21 25
    c'est a dire faire un tri sur "valeur1" sans se soucier de valeur2.
    ais je été plus clair ?
    Merci.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dede92
    Hello,
    pour etre plus precis,
    dans ma structure
    struct { int valeur1;
    int valeur2; } ti[] = { 17, 25, 21, 25, 19, 23};
    Tu veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct 
    { 
       int valeur1; 
       int valeur2; 
    } 
    ti[] = { {17, 25}, {21, 25}, {19, 23}};
    C'est un tableau de structures. Rien à voir avec un tableau à 2 dimensions.
    le resultat souhaité serait :
    17 25
    19 23
    21 25
    c'est a dire faire un tri sur "valeur1" sans se soucier de valeur2.
    ais je été plus clair ?
    Ok. Il ne reste plus qu'à écrire le code avec qsort() (C standard, please). C'est ce que tu avais posté précédemment ?

    Je te conseille de définir un type structure voire un typedef pour simplifier le codage...

    Ceci fonctionne :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    struct S
    {
       int valeur1;
       int valeur2;
    };
     
    static int compare (void const *a, void const *b)
    {
       int ret;
       struct S const *pa = a;
       struct S const *pb = b;
     
       if (pa->valeur1 == pb->valeur1)
       {
          ret = 0;
       }
       else if (pa->valeur1 > pb->valeur1)
       {
          ret = 1;
       }
       else
       {
          ret = -1;
       }
       return ret;
    }
     
    static void print (struct S const *p_ti, size_t n)
    {
       size_t i;
     
       for (i = 0; i < n; i++)
       {
          struct S const *p = p_ti + i;
          printf ("%d, %d\n", p->valeur1, p->valeur2);
       }
    }
     
    int main (void)
    {
       struct S ti[] =
       {
          {17, 25},
          {21, 25},
          {19, 23}
       };
     
       printf("Avant le tri\n");
       print (ti, sizeof ti / sizeof *ti);
     
       qsort (ti, sizeof ti / sizeof *ti, sizeof *ti, compare);
     
       printf("Apres le tri\n");
       print (ti, sizeof ti / sizeof *ti);
     
     
       system ("PAUSE");
       return 0;
    }

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 527
    Points : 215
    Points
    215
    Par défaut
    Merci beaucoup,
    c'est exactement ce je cherchais à faire !

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

Discussions similaires

  1. Tri dans un tableau à deux dimensions
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/08/2007, 12h59
  2. [Tableaux] Tri sur un tableau à 2 dimensions
    Par DrOOMMgba dans le forum Langage
    Réponses: 4
    Dernier message: 03/04/2007, 19h47
  3. [Tableaux] Tri d'un tableau multi-dimensions
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 05/12/2006, 10h08
  4. Réponses: 1
    Dernier message: 03/09/2006, 18h53
  5. tri d'un tableau à 2 dimensions
    Par kamalkam dans le forum ASP
    Réponses: 2
    Dernier message: 23/05/2006, 17h30

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