begin process at 2012 05 27 21:06:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > TRI PAR TAS GÉNÉRIQUE. RAPIDE ET EFFICACE.

TRI PAR TAS GÉNÉRIQUE. RAPIDE ET EFFICACE.


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Initié Date de création :19/04/2004 Vu / téléchargé :9 912 / 378

Auteur : TeLeTUbIz

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Ben tout est dans le titre.
C'est un fichier .h
Puis tout est expliqué au début en commentaire.

Sauf la façon de fonctionner, mais la, faut me demander si vous avez vraiment envie.
Désolé, j'ai déjà expliqué ce soir. :)

Source

  • /*
  • * Implémentation du tris par tas générique. Bloomwhite 2002-2004
  • *
  • * Simple fonction (en fait c'est un objet utilisé en fonction).
  • * exemple: TriTas<int>(tab, taille(tab)); // ici, tab est un tableau d'entiers (int).
  • *
  • * Entrées:
  • * Le premier argument est un tableau de type C (vecteur). Il peut être de type quelconque.
  • * Le second argument est la taille du tableau en nombre d'éléments.
  • * (ou du dernier élément +1 à trier)
  • * Le troisième argument est optionnel:
  • * c'est une fonction de comparaison selon laquelle va être trié le tableau,
  • * si cette fonction est de type >, le tableau sera trié dans l'ordre croissant.
  • * Si elle n'est pas précisée, l'opérateur > sera utilisé par défaut;
  • * il faudra alors que cet opérateur soit définit pour le type contenu dans le tableau.
  • *
  • * Sorties:
  • * Aucune sortie. Le tableau sera trié.
  • *
  • * A Public OpenSource Project.
  • */
  • #ifndef _TriTas_H_
  • #define _TriTas_H_
  • // Je fourni la fonction utilisée par défaut pour le tri.
  • // Pour des raisons aussi bien obscures que mystérieuses, j'ai pas pu la mettre dans la classe.
  • template<class Type>
  • inline bool _compare_defaut_tritas (Type a, Type b) { return (a>b); }
  • // En fait, je pense que c'est parce qu'elle est utilisée en argument par défaut dans la classe.
  • template<class Type>
  • class TriTas
  • {
  • public:
  • TriTas(Type*, int, bool (__cdecl*)(Type, Type)=_compare_defaut_tritas); // Tableau,taille,fct
  • ~TriTas() {};
  • private:
  • inline void echange(Type& a, Type& b) { Type temp= a; a= b; b= temp; }
  • bool (*compare) (Type, Type); // Donnée membre et non fonction (pointeur sur fonction).
  • void entasser (int =0); // Par défaut entasser la racine.
  • void construit (); // Tri.
  • int _taille; // Taille du tableau.
  • Type* _a; // Tableau à trier.
  • };
  • template<class Type>
  • TriTas<Type>::TriTas(Type* a, int taille, bool (*comp)(Type, Type)) : _taille(taille), _a(a)
  • {
  • compare = comp;
  • construit(); // D'abord préparation
  • for (--_taille; _taille > 0; --_taille)
  • {
  • echange(_a[_taille],_a[0]); // Puis tri.
  • entasser();
  • }
  • }
  • template<class Type>
  • void TriTas<Type>::entasser(int noeud)
  • {
  • int max,
  • gauche= 2*noeud+1,
  • droite= gauche+1;
  • max = noeud;
  • if (gauche<_taille && compare(_a[gauche],_a[noeud])) max = gauche;
  • if (droite<_taille && compare(_a[droite],_a[max]) ) max = droite;
  • if (max != noeud)
  • {
  • echange(_a[max],_a[noeud]);
  • entasser(max);
  • }
  • }
  • template<class Type>
  • void TriTas<Type>::construit()
  • {
  • int last;
  • for(last= _taille/2 - 1; last>=0; --last) // on commence au dernier ayant
  • entasser(last); // un fils jusqu'au premier (la racine)
  • }
  • #endif //_TriTas_H_
/*
 * Implémentation du tris par tas générique. Bloomwhite 2002-2004
 *
 *	Simple fonction (en fait c'est un objet utilisé en fonction).
 *	exemple: TriTas<int>(tab, taille(tab));	// ici, tab est un tableau d'entiers (int).
 *
 *	Entrées:
 *	Le premier argument est un tableau de type C (vecteur). Il peut être de type quelconque.
 *	Le second argument est la taille du tableau en nombre d'éléments.
 *		(ou du dernier élément +1 à trier)
 *	Le troisième argument est optionnel:
 *		c'est une fonction de comparaison selon laquelle va être trié le tableau,
 *		si cette fonction est de type >, le tableau sera trié dans l'ordre croissant.
 *		Si elle n'est pas précisée, l'opérateur > sera utilisé par défaut;
 *		il faudra alors que cet opérateur soit définit pour le type contenu dans le tableau.
 *
 *	Sorties:
 *	Aucune sortie. Le tableau sera trié.
 *
 *		A Public OpenSource Project.
 */

#ifndef _TriTas_H_
#define _TriTas_H_


// Je fourni la fonction utilisée par défaut pour le tri.
// Pour des raisons aussi bien obscures que mystérieuses, j'ai pas pu la mettre dans la classe.
template<class Type>
inline bool _compare_defaut_tritas	(Type a, Type b) { return (a>b); }
// En fait, je pense que c'est parce qu'elle est utilisée en argument par défaut dans la classe.


template<class Type>
class TriTas
{
public:
	TriTas(Type*, int, bool (__cdecl*)(Type, Type)=_compare_defaut_tritas);	// Tableau,taille,fct
	~TriTas() {};
private:
	inline void echange(Type& a, Type& b)	{	Type temp= a; a= b; b= temp;	}
	bool (*compare)	(Type, Type);	// Donnée membre et non fonction (pointeur sur fonction).

	void entasser	(int =0);	// Par défaut entasser la racine.
	void construit	();			// Tri.

	int _taille;				// Taille du tableau.
	Type* _a;					// Tableau à trier.
};


template<class Type>
TriTas<Type>::TriTas(Type* a, int taille, bool (*comp)(Type, Type)) : _taille(taille), _a(a)
{
	compare = comp;
	construit();							// D'abord préparation
	for (--_taille; _taille > 0; --_taille)
	{
		echange(_a[_taille],_a[0]);			// Puis tri.
		entasser();
	}
}

template<class Type>
void TriTas<Type>::entasser(int noeud)
{
	int	max,
		gauche= 2*noeud+1,
		droite= gauche+1;
	max = noeud;
	if (gauche<_taille && compare(_a[gauche],_a[noeud]))	max = gauche;
	if (droite<_taille && compare(_a[droite],_a[max])  )	max = droite;

	if (max != noeud)
	{
		echange(_a[max],_a[noeud]);
		entasser(max);
	}
}

template<class Type>
void TriTas<Type>::construit()
{
	int last;
	for(last= _taille/2 - 1; last>=0; --last)	// on commence au dernier ayant
		entasser(last);							// un fils jusqu'au premier (la racine)
}

#endif //_TriTas_H_

 Conclusion

Ben voila. Souvent on cherche des algos de tri, ben la y'en a un. C'est l'un des plus puissant et moins contraignant existant.
Sinon utilisé la STL, il est dedans, c'est le même.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   tritas
    •   Debug
      • main.exeTélécharger ce fichier [Réservé aux membres club]180 300 octets
      • main.ilkTélécharger ce fichier [Réservé aux membres club]214 628 octets
      • main.objTélécharger ce fichier [Réservé aux membres club]9 942 octets
      • main.pchTélécharger ce fichier [Réservé aux membres club]209 684 octets
      • main.pdbTélécharger ce fichier [Réservé aux membres club]377 856 octets
      • vc60.idbTélécharger ce fichier [Réservé aux membres club]41 984 octets
      • vc60.pdbTélécharger ce fichier [Réservé aux membres club]53 248 octets
    • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier345 octets
    • main.dspTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 377 octets
    • main.dswTélécharger ce fichier [Réservé aux membres club]Voir ce fichier533 octets
    • main.ncbTélécharger ce fichier [Réservé aux membres club]33 792 octets
    • main.optTélécharger ce fichier [Réservé aux membres club]48 640 octets
    • main.plgTélécharger ce fichier [Réservé aux membres club]1 134 octets
    • TriTas.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 713 octets

Télécharger le zip


 Sources du même auteur

[STL] CONNAITRE LA TAILLE D'UN FICHIER ET COPIER DANS UN STR...
TOURS DE HANOÏ: INTRODUCTION AUX ALGOS RÉCURSIFS.
Source avec Zip 1 000 000 DE NOMBRES PREMIERS EN 0.062 SECONDES ?
POINTEURS SUR FONCTIONS
Source avec Zip Source avec une capture CRIBLE D'ERATOSTENE ET GÉNÉRATION DE PAGES WEB.

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales