Tri d'une liste chainee en C

Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 13 févr. 2009 à 18:18
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 14 févr. 2009 à 11:35
Bonjour,

on voit les listes chainées au cours et je dois faire un tri de celle-ci. J'ai jamais eu d'exemple pour ça et j'ai donc fait une fonction qui reçoit le pointeur de base et le revoit après le tri.

Par contre le tri ne fonctionne pas, j'ai du faire des boulettes mais je ne vois pas ou vu que je n'ai jamais vu cette matière. Voici ma fonction

Liste *tri (Liste *pb)
{
    Liste *pt, *pt2, *xtp;
    pt = (Liste *)malloc(sizeof (Liste *));
    pt2 = (Liste *)malloc(sizeof (Liste *));
    xtp = (Liste *)malloc(sizeof (Liste *));
    pt = pb;
    xtp = pb;
    int sw, i, j;        
    do
    {
        sw=0;
        for (i = 0; i < compte(pb); i++)
            pt = pt->suivant;
            for (j = 1; j < compte(pb)-1; j++)
                pt2 = pt2->suivant;
                 {
                      if (pt->donnee > pt2->donnee)
                      {
                          xtp->donnee =pt->donnee;
                          pt->donnee = pt2->donnee;
                          pt2->donnee = xtp->donnee;
                          sw=1;
                       }
                     }
    }while(sw==1); 
    return pb;
}


Mon but est de faire parcourir deux boucles avec deux pointeurs différents et de comparer les données entre ces deux boucles, mais je ne sais pas si c'est la meilleure solution...

Merci d'avance et soyez indulgent, j'ai jamais vu ça!!!

2 réponses

mamiemando Messages postés 33316 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 octobre 2024 7 796
14 févr. 2009 à 01:36
Tu peux t'inspirer des méthodes de tri sur wikipedia.
https://fr.wikipedia.org/wiki/Tri_rapide

Si tes données étaient stockées dans un tableau, tu pourrais aussi utiliser la fonction qsort.
http://en.wikipedia.org/wiki/Qsort_(C_Standard_Library)

Bonne chance
2