Bonjour a tous , voici le probleme : je dois faire un programme triant une liste de nombre de 10 caracteres (caracteres car s'exprime dans n'importe quelle base).
C'est une liste chainée. Voila le principe :

nombres a trier :

48081 97342 90287 90583 53202 65215 48801

premiere etape :
On cherche tous les nombres qui se terminent par 0, on les mets dans le seau 0.Dans cette etape , le seau 0 est vide car il n y apas de nombres se terminant par 0

ensuite on chertche les nombres qui se terminent par 1, on les met dans le seau 1. Donc 48081 et 48801 sont dans ce seau.

et ainsi de suite jusqu au seau 9

On relie ces seaux entre eux dans l ordre, on obtient la liste triée par le dernier nombre :

48081 48801 97342 53202 90583 65215 90287

On recommence avec l avant dernier nombre et ainsi de suite jusqu a obtenit la liste triée entierement.

La representation des seaux est fait par un tableau ou le nombre de lignes = la base.

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
66
67
68
69
70
71
72
73
liste tri(liste l,int b)
{
    int i,j,longueur;//i designe un caractere des nombres, 
    liste A[b]; //Ce tableau represente les "seaux"
    element *e; //Pour parcourir la liste l
    element *f; //Pour parcourir la liste dont le 1er element est designe par A[j]
 
    longueur=calcullongueur(longueur,l);
 
    for (i=longueur-1;i>0;i=i-1)
    {
        for (j=0;j<b;j=j+1)
        {
            A[j]=NULL;  //on mets a NULL le tableau de seaux
        }
 
        e=l;
        while (e !=NULL)
        {
            element *nouv;  
            nouv=(element*)malloc(sizeof(element)); //on cree un nouvelle elemnt a ajouter dans la liste designz par A[j] 
            memcpy(nouv->valeur,e->valeur,11*sizeof(char)); //on prends la valeur de e pour la copier dans A[j]
            nouv->suivant=NULL;
 
            if (e->valeur[i]=='a')
            j=10;
            else if (e->valeur[i]=='b')
            j=11;
            else if (e->valeur[i]=='c')
            j=12;
            else if (e->valeur[i]=='d')
            j=13;
            else if (e->valeur[i]=='e')
            j=14;
            else if (e->valeur[i]=='f')
            j=15;
            else
            j=e->valeur[i];
 
            if (A[j] != NULL)
            {
                f=A[j];
                while (f->suivant != NULL)
                    f=f->suivant;
                f->suivant=nouv;
            }
            else  
            {
                memcpy(A[j]->valeur,e->valeur,11*sizeof(char));
                A[j]->suivant=NULL;
            }
            e=e->suivant;
        }
        // a partir d'ici on ecrase les valeurs de la liste l 
        e=l;
        j=0;
        while (e!=NULL)
        {
            while (A[j]=NULL)
                  j=j+1;
            f=A[j];
            memcpy(e->valeur,f->valeur,11*sizeof(char)); 
            while (f->suivant !=NULL)
            {
               f=f->suivant;
               e=e->suivant;
               memcpy(e->valeur,f->valeur,11*sizeof(char));
            } 
            j=j+1;           
        }
    }    
    return l;
}
Comprends pas ... si vous avez des questions ... je vous serais tres reconnaissant !