ALGORITHMES DE TRIS

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
2
Date d'inscription
mercredi 20 octobre 2004
Statut
Membre
Dernière intervention
2 février 2006
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35002-algorithmes-de-tris

Messages postés
2
Date d'inscription
mercredi 20 octobre 2004
Statut
Membre
Dernière intervention
2 février 2006

Salut, je suis en train de me pencher sur les tris en ce moment et je suis tombé sur ta source, je m'interesse plus particulièrement au tri rapide.
Je ne sais pas si tu as trouvé ton erreur pour le décalage d'indice, mais le gros point fort du tri rapide est le pivot. Tu intègres pourtant dans ton code la position du pivot mais tout est fait comme si il etait forcément en première position, ton code ne marche donc pas dans toutes les situations. Une petite modif suffit, lorsque tu choisis ton pivot, tu le change de place avec le premier élément du tableau et tu commence ta partition du tableau après le pivot. il te suffit ensuite de replacer le pivot entre tes deux partitions. C'est une solution mais il en existe plein. Je pense que celle ci fonctionne, je ne l'ai pas testé mais sur papier ça a l'air de fonctionner, mais surtout tu as le choix du pivot sur la premiere partition, ça peut accelerer le calcul si sil est bien choisi (ex: pivot = valeur la plus proche de la valeur moyenne de tous le tableau).

void Echange (int Tab[], inti, int j)
{
int Temp = Tab[i] ;
Tab[i] = Tab[j] ;
Tab[j] = Temp ;
}

void TriRapide(int Tab[],int Debut, int p, int Fin)
{
int i, j, Temp, ValPivot = Tab[p] ;
if (Fin <= Debut) return() ;
if (p != Debut) Echange (Tab, p, Debut) ;
i = Début ;
j = Fin +1 ;
Do
{
while ((Tab[++i] < ValPivot) && (i <= Fin)) ;
while ((Tab[--j] > ValPivot) && (j > Debut)) ;
if (i < j) Echange(Tab, i, j) ;
}
while(i < j) ;
Echange(Tab, j, Debut)
TriRapide(Tab, Debut, Debut, j-1) ;
TriRapide(Tab, j+1, j+1, Fin) ;
}



A bientôt et si tu testes cette version, dis moi si ça marche !
Messages postés
4
Date d'inscription
vendredi 9 décembre 2005
Statut
Membre
Dernière intervention
27 septembre 2006

Merci de vos remarque les gars! ça me permet de mieux m'appliquer dans mes codes!
C'est vrai qu'a la limite elles sont choquantes, mais c'est indispensable:C'est à ça qu'on
reconnait des bons codeurs!
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

La demarche pour l'utilisateur est interessante mais ne doit pas se faire au detriment des codeurs qui sont les premiers vises et plus particulierment sur ce site....
on se dit sa surtout quand on voit ta fonction clignote() ...
Pour l'areation du code, c'est tres important et tres bien d'avoir cette notion en tete et de l'appliquer, mais il faut faire attention de ne pas enrumer quelqu'un avec un trop plein d'air !!! ;-)
Si jamais tu souhaite quand meme faire une belle presentation (ce qui est normal), regarde du cote de devcpp qui creer lui meme le squelette d'une application win32 et si tu veux garder un code portable, ba t'as qu'a taper dans le wxWindows qui est pas trop compliquer a digerer ou meme Qt qui est a mon avis encore plus simple.... regarde mes sources tu verras 2 exemples de bases d'utilisation de cette lib (frames, boutons, gestionnaire d'action, ...) et il y en a encore d'autre sur ce site.
Cela te permettra un code vachment plus sympa a regarder et qui aura un interet tout autre.... :-)

@++ et bon coding !
Messages postés
173
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
22 août 2008

Je veux pas faire le rabat joie, mais la console, tu peux la faire clignoter que tu veux, elle restera toujours moche :/
(oui je sais, t'as pas encore dépassé le stade de la console mais peu importe)
Par contre si tu veux progresser de manière utile, remplace cette infame fonction clignotte par,
for (int i = 0; i < 26;i++)
{
clrscr();
textcolor(15);
printf(" \n \n \n \n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n");
printf(" NTCHANA NYAMSI ARLAIS");
delay(M);
}
Mais bon, c'est toujours pas ca :/
Sinon, plutot que de sauter une ligne entre chaque fonction, découpe ton programme en d'autres sous fonctions aux noms explicites ( genre lecture_tableau(), affiche_menu(), etc... )
comme ca tu gagneras en clarté
Afficher les 9 commentaires