begin process at 2012 02 12 08:11:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CLASS TEMPLATE DES PRINCIPAUX TRIS DE TABLEAUX

CLASS TEMPLATE DES PRINCIPAUX TRIS DE TABLEAUX




 Description

Une fois instaciée, vous pouvez passez un tableau en parametre , il sera trié par la methode de tri que vous choisissez .

Source

  • #include <iostream>
  • using namespace std;
  • template <typename TYPE>
  • class Tri{
  • private:
  • void permuter(TYPE&,TYPE&); // permutation de deux variables
  • void fusionner(TYPE *,TYPE *,TYPE *,int,int,int); // Fusionner deux tabelaux tri&#65533;s en un troisi&#65533;me tri&#65533;
  • public:
  • void affichage(TYPE *,int); // affichage
  • void triParSelection(TYPE *,int); // tri par selection
  • void triParBulles(TYPE *,int); // tri par bulles
  • void triParInsertion(TYPE *,int); // tri par insertion
  • void triParFusion(TYPE *,int,int); // tri par fusion
  • void triRapide(TYPE *,int); // tri rapide
  • };
  • // afficher un tableau
  • template <typename TYPE>
  • void Tri<TYPE>::affichage(TYPE t[],int taille){
  • for(int i=0;i<taille;i++){
  • cout<<t[i]<<"<";
  • }
  • }
  • // permutation
  • template <typename TYPE>
  • void Tri<TYPE>::permuter(TYPE &x,TYPE &y){
  • TYPE temp=x;
  • x=y;
  • y=temp;
  • }
  • // Fusionner deux tabelaux tri&#65533;s en un troisi&#65533;me tri&#65533;
  • template <typename TYPE>
  • void Tri<TYPE>::fusionner(TYPE t1[],TYPE t2[],TYPE t3[],int l1,int l2,int l3){
  • int i=0;
  • int j=0;
  • int k=0;
  • while((i<l1)&&(j<l2)){
  • if(t1[i]<t2[j]){
  • t3[k]=t1[i];
  • i++;
  • }else{
  • t3[k]=t2[j];
  • j++;
  • }
  • k++;
  • }
  • if(l1>l2){
  • for(int cpt=i;cpt<l1;cpt++){
  • t3[k]=t1[cpt];
  • k++;
  • }
  • }else{
  • for(int cpt=j;cpt<l2;cpt++){
  • t3[k]=t2[cpt];
  • k++;
  • }
  • }
  • }
  • // Tri par selection
  • template <typename TYPE>
  • void Tri<TYPE>::triParSelection(TYPE t[],int taille){
  • for(int i=0;i<taille-1;i++){
  • int min=i;
  • for(int j=i+1;j<taille;j++)
  • if(t[j]<=t[min])
  • min=j;
  • permuter(t[min],t[i]);
  • }
  • }
  • // Tri par bulles
  • template <typename TYPE>
  • void Tri<TYPE>::triParBulles(TYPE t[],int taille){
  • bool b=true;
  • while(b){
  • b=false;
  • for(int i=0;i<taille-1;i++){
  • if(t[i]>t[i+1]){
  • permuter(t[i],t[i+1]);
  • b=true;
  • }
  • }
  • }
  • }
  • // Tri par insertion
  • template <typename TYPE>
  • void Tri<TYPE>::triParInsertion(TYPE t[],int taille){
  • for(int i=1;i<taille;i++){
  • TYPE x=t[i];
  • int j=i-1;
  • while((t[j]>x)&&(j>=0)){
  • t[j+1]=t[j];
  • j=j-1;
  • }
  • t[j+1]=x;
  • }
  • }
  • // Tri par fusion
  • template <typename TYPE>
  • void Tri<TYPE>::triParFusion(TYPE t[],int d,int f){
  • if(d<f){
  • int q=(d+f)/2;
  • triParFusion(t,d,q);
  • triParFusion(t,q+1,f);
  • TYPE t1[q],t2[q+1];
  • for(int i=d;i<=q;i++)
  • t1[i]=t[i];
  • for(int j=q;j<=f;j++)
  • t2[j]=t[j];
  • fusionner(t1,t2,t,q,q+1,f);
  • }
  • }
  • // Tri rapide
  • template <typename TYPE>
  • void Tri<TYPE>::triRapide(TYPE t[],int taille){
  • if(taille<2)return;
  • int i=1; // it&#65533;rateur de gauche &#65533; droite
  • int j=taille-1; // it&#65533;rateur de droite &#65533; gauche
  • TYPE pivot;
  • pivot=t[0];
  • while(j>=i)
  • if(t[i]<=pivot)i++;
  • else if(pivot<=t[j])j--;
  • else permuter(t[i++],t[j--]);
  • t[0]=t[j];
  • t[j]=pivot;
  • triRapide(t,j);
  • triRapide(t+i,taille-i);
  • }
#include <iostream>
using namespace std;
template <typename TYPE>
class Tri{
    private:
    void permuter(TYPE&,TYPE&); // permutation de deux variables
    void fusionner(TYPE *,TYPE *,TYPE *,int,int,int); // Fusionner deux tabelaux tri&#65533;s en un troisi&#65533;me tri&#65533;
    public:
    void affichage(TYPE *,int); // affichage
    void triParSelection(TYPE *,int); // tri par selection
    void triParBulles(TYPE *,int); // tri par bulles
    void triParInsertion(TYPE *,int); // tri par insertion
    void triParFusion(TYPE *,int,int); // tri par fusion
    void triRapide(TYPE *,int); // tri rapide
};

// afficher un tableau
template <typename TYPE>
void Tri<TYPE>::affichage(TYPE t[],int taille){
    for(int i=0;i<taille;i++){
    cout<<t[i]<<"<";
    }
}


// permutation
template <typename TYPE>
void Tri<TYPE>::permuter(TYPE &x,TYPE &y){
    TYPE temp=x;
    x=y;
    y=temp;
}

// Fusionner deux tabelaux tri&#65533;s en un troisi&#65533;me tri&#65533;
template <typename TYPE>
void Tri<TYPE>::fusionner(TYPE t1[],TYPE t2[],TYPE t3[],int l1,int l2,int l3){
    int i=0;
    int j=0;
    int k=0;
    while((i<l1)&&(j<l2)){
    if(t1[i]<t2[j]){
        t3[k]=t1[i];
        i++;
    }else{
        t3[k]=t2[j];
        j++;
    }
    k++;
    }
    if(l1>l2){
        for(int cpt=i;cpt<l1;cpt++){
            t3[k]=t1[cpt];
            k++;
        }
    }else{
        for(int cpt=j;cpt<l2;cpt++){
            t3[k]=t2[cpt];
            k++;
        }
    }

}


// Tri par selection
template <typename TYPE>
void Tri<TYPE>::triParSelection(TYPE t[],int taille){
    for(int i=0;i<taille-1;i++){
	    int min=i;
	    for(int j=i+1;j<taille;j++)
            if(t[j]<=t[min])
            min=j;
        permuter(t[min],t[i]);
	}
}

// Tri par bulles
template <typename TYPE>
void Tri<TYPE>::triParBulles(TYPE t[],int taille){
    bool b=true;
	while(b){
	b=false;
	for(int i=0;i<taille-1;i++){
		if(t[i]>t[i+1]){
			permuter(t[i],t[i+1]);
			b=true;
		}
	}
	}

}

// Tri par insertion
template <typename TYPE>
void Tri<TYPE>::triParInsertion(TYPE t[],int taille){
    for(int i=1;i<taille;i++){
        TYPE x=t[i];
        int j=i-1;
        while((t[j]>x)&&(j>=0)){
            t[j+1]=t[j];
            j=j-1;
            }
            t[j+1]=x;
    }
}

// Tri par fusion
template <typename TYPE>
void Tri<TYPE>::triParFusion(TYPE t[],int d,int f){
    if(d<f){
    int q=(d+f)/2;
    triParFusion(t,d,q);
    triParFusion(t,q+1,f);
    TYPE t1[q],t2[q+1];
    for(int i=d;i<=q;i++)
    t1[i]=t[i];
    for(int j=q;j<=f;j++)
    t2[j]=t[j];
    fusionner(t1,t2,t,q,q+1,f);
    }
}

// Tri rapide
template <typename TYPE>
void Tri<TYPE>::triRapide(TYPE t[],int taille){
    if(taille<2)return;
    int i=1; // it&#65533;rateur de gauche &#65533; droite
    int j=taille-1; // it&#65533;rateur de droite &#65533; gauche
    TYPE pivot;
    pivot=t[0];
    while(j>=i)
        if(t[i]<=pivot)i++;
        else if(pivot<=t[j])j--;
        else permuter(t[i++],t[j--]);
    t[0]=t[j];
    t[j]=pivot;
    triRapide(t,j);
    triRapide(t+i,taille-i);

}



 Sources du même auteur

ENSEMBLE DISJOINT
FILE DE PRIORITÉ DYNAMIQUE
Source avec Zip CALCULER NOMBRE DE MERSENNE AVEC BIBLIOTHÈQUE DE GESTION DE ...
Source avec Zip RECHERCHER LE CHEMIN OPTIMALE DANS UN GRAPHE ( ALGORITHME DE...
Source avec Zip BIBLIOTHÈQUE DE GESTION DE GRANDS NOMBRES POSITIFS

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

 Sources en rapport avec celle ci

Source avec Zip CLASS STRING par T_Mehdi
Source avec Zip LES ENSEMBLE C++ par T_Mehdi
Source avec Zip AGENDA WINBGIM par T_Mehdi
Source avec Zip BIBLIOTHÈQUE DE GESTION DE GRANDS NOMBRES POSITIFS par mehdi7604

Commentaires et avis

Commentaire de tibur le 30/01/2008 09:32:04

Il manque le bogosort ;)
cf : http://en.wikipedia.org/wiki/Bogosort
Thibaut

Commentaire de Pistol_Pete le 30/01/2008 10:50:00

Le bogosort... ca doit etre l'algo de tri le plus inutile qui existe. Pas besoin de perdre son temps a coder cet algorithme.

A+

Commentaire de mehdi7604 le 30/01/2008 17:55:04

Non les tris principaux sont ceux traités , il existe bcp d'autres , mais j'ai choisi LES PRINCIPAUX .

Commentaire de xkamen le 31/01/2008 11:37:45

Bonjour,

J'avais réalisé il y a déjà un certain temps une source plus complète de tri, contenant une trentaine d'algorithmes de tri. Cela peut compléter ta source.

http://www.cppfrance.com/codes/LIBRAIRIE-CONTENANT-TRENTAINE-ALGORITHMES-TRI_41100.aspx

A+

Commentaire de mehdi7604 le 31/01/2008 13:18:01

oui , je l'avais conuslté avant .

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,435 sec (4)

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