Trier des structures...

Introduction

Pour rappel : les structures en C.

Nous travaillons avec une structure de type "individu" composée de deux champs: un matricule, et un nom.
Les différentes occurences structures sont ensuite placées dans un tableau.

Composition de structure en C

#define NMAX 25

typedef struct { unsigned int mat; char nom[20]; } Individu;
Individu tableau[NMAX];

En supposant que les valeurs ont été préalablement affectées aux différents champs, nous pourions provoquer l'affichage des structures de cette manière:

Affichage de structure en C


for ( k=0; k<NMAX; k++ )
printf ("Matricule : %d -> Individu : %s\n", Individu[k].mat, Individu[k].nom);


 

Fonctions de tri de structure en C

Nous allons revoir nos fonctions de tri d'entiers, et les adapter à un tri de structures...

Tri de structure

enum { MAT, NOM, NOMMAT }; //critère de comparaison

void tri( Individu t[], int n, int id)
{
int p, temp, k1, k2;
for (k1=0;k1<n;k1++)
{
p=k1;
for (K2=k1+1;k2<n;k2++)
if ( compare(t[k1],t[k2],id) >0 )
{
p=k2;
}
permute(&t[k1], &t[k2]);
}
}

Comparer et permuter des structures

int compare (Individu x, Individu y, int choix)
{
int r;
switch(choix)
{
case MAT : return px->mat-py->mat;
case NOM : return strcmp(px->nom,pyb->nom);
case NOMAT : r=strcmp(px->nom,py->nom); return r!=0 ? r : px->mat-pyb->mat;
default : return px->mat-py->mat;
}
}

void permute (Individu *x, Individu *y)
{
Individu w ;
w=*x;
*x=*y;
*y=w;
}

 

Document créé le 12/03/03 01:00, dernière modification le 23/03/18 10:27
Source du document imprimé : https://www.gaudry.be/c-trier-structure.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.