QUICKSORT, ALGORITHME DE TRI EN O(N LOG N)

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 - 2 nov. 2003 à 17:48
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 - 4 nov. 2003 à 19:00
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/17207-quicksort-algorithme-de-tri-en-o-n-log-n

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
4 nov. 2003 à 19:00
Je dirais même que ça m'a complètement éclairer, merci, vraiment!!! Je comprend enfin à quoi ça sert ^^ lol

bon ben je vais essayer de l'utiliser alors :p

Merci encore :)
gvhecke Messages postés 65 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 21 mai 2008
3 nov. 2003 à 21:56
Il arrive souvent de vouloir réutiliser un même algorithme pour manipuler des structures différentes. Par exemple, trier un vercteur d'entier (int), un vecteur de réels (double), de nombres à virgule flottante (float), de string de caractère (char* ou char[]).

Il serait bien bête de devoir réimplenter à chaque fois une nouvelle fonction alors que dans l'ensemble, le code reste identique. Il n'y a que le type des variables que l'on manipule qui diffère (une fois int, une autre fois double ou float...)

Afin de permettre ce genre de chose, le language c++, permet en plaçant la ligne template <classe Type> de généraliser l'usage d'une fonction ou d'une class.

Dans l'exemple ci-dessus, j'ai coder la fonction QuickSort dans une classe (généralisée par l'usage de la ligne template <class T>). Le vecteur peut alors être de type T. Pour que cela fonctionne il faut que les opérateur ">" et "<" ait été défini pour les objet de class T. s'il on veut pouvoir trier des vecteur de string par ordre alphabétique, il faut avoir défini les opérateur "<" et ">" pour les string.

définition d'une fonction généralisée:
========================
template <class Type>
type_retour nom_Fonction (Type variable1, Type variable2, ...);

définition d'une classe généralisée:
=======================
template <class Type>
class MaClasse
{
public:
MaClasse(); //constructeur
~MaClasse(); //Destructeur
Type& NomFonction(const Type& var); //expl de fonction membre
...
private: //membre, champs de ma classe
Type membre1; //variable de type Type
Type* pointeurVersMembre2; //pointeur vers une var de type Type
int AutreMembre;
...
};

template <class Type>
MaClasse<Type>::MaClasse() {...} //définition du constructeur

template <class Type>
Type& MaClasse<Type>::NomFonction(const Type& var)
{...} //exemple de fonction membre d'une classe


Déclaration d'une variable MaClasse de type int:
=================================
MaClasse var;

Déclaration d'un meme objet pour le type float:
================================
MaClasse<float> var;


Voilà.

J'espère que ca t'éclairera.

Geofrey
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
2 nov. 2003 à 17:48
bon ça fait longtemps que je regarde des codes comme celui-la, et à chaque fois je ne peux pas tout comprendre à cause d'un petite conner*** celle-ci:

template <...>

je ne sais pas à quoi servent les <> :'( serais tu me l'expliquer STP??? au moins j'apprendrai quelque chose de nvo :)

j'espère que tu pourras m'aider....

bye
Rejoignez-nous