Accueil > > > LIBRAIRIE CONTENANT UNE TRENTAINE D'ALGORITHMES DE TRI
LIBRAIRIE CONTENANT UNE TRENTAINE D'ALGORITHMES DE TRI
Information sur la source
Description
Je poste ici une librairie contenant un grand nombre d'algorithmes de tri, dont les plus connus et les plus utilisés (comme le tir à bulles, le tri par sélection, le tri par insertion, le tri rapide, ...) qui ont déjà été déposé sur ce site. Je viens juste compléter toutes les librairies précédentes en ajoutant un grand nombre d'algorithmes de tri qui sont parfois des variantes améliorées des tris usuels. De plus, la librairie a été réalisée à l'aide de template afin de ne pas limiter les tris à certaines données. Pourquoi ces différents tris ? Nombreuses sont les personnes qui souhaitent trié une liste ou un vecteur, et selon leur utilisation, certains tris peuvent être plus judicieux qu'un autre. Il n'en existe pas un qui soit meilleur que les autres, mais suivant le nombre de valeurs à trier, la distribution de ces valeurs, le nombre de valeurs différentes utilisées, le fait que ces valeurs puissent être déjà presque triées ou non, il conviendra de choisir un algorithme de tri précis. C'est pourquoi j'ai implémenté toutes ces méthodes, pour que chacun puisse les essayer. Un fichier PDF accompagne la source afin d'expliquer en détail les différentes méthodes de tri.
Source
- #include <cstdio>
- #include <ctime>
- #include "tri.h"
- #include "chrono.h"
-
-
- #define NODISP
-
- #define MAXVALUE_1 256
- #define MAXVALUE_2 2
-
- #define MAXSIZE_1 4096
- #define MAXSIZE_2 10
- #define MAXSIZE_3 25
-
- typedef int data; // A modifier pour essayer d'autres types de valeur
- std::vector<data> vector, vectorTrie;
-
- int size;
- int maxvalue;
- Chrono chrono;
-
- /*********************************************************************************************/
- inline int compareFunc(const void* elem1, const void* elem2)
- {
- if (*(data*)elem1 > *(data*)elem2) return 1;
- else if (*(data*)elem1 < *(data*)elem2) return -1;
- else return 0;
- }
-
- inline unsigned int keyFunc (const void *elem)
- {
- return unsigned int(*(data*)elem);
- }
-
- /*********************************************************************************************/
- void ComparisonSort(char method)
- {
- // Nom du tri en cour
- printf("> %s : ",NameOfSort(method).c_str());
-
- // Préparation au tri
- vectorTrie = vector;
- chrono.Start();
-
- // Tri
- Sort<data>(method,vectorTrie,size,compareFunc);
-
- // Récupération et affichage du temps écoulé
- float Time = chrono.GetDiff_ms();
- printf("%f ms > ",Time);
-
- // Vérification si le tri a été bien effectué
- if (VerifySort<data>(vectorTrie,size,compareFunc)) printf("OK\n");
- else printf("FAILED\n");
- }
-
- void KeySort(char method)
- {
- // Nom du tri en cour
- printf("> %s : ",NameOfSort(method).c_str());
-
- // Préparation au tri
- vectorTrie = vector;
- chrono.Start();
-
- // Tri
- Sort<data,unsigned int>(method,vectorTrie,size,maxvalue,keyFunc);
-
- // Récupération et affichage du temps écoulé
- float Time = chrono.GetDiff_ms();
- printf("%f ms > ",Time);
-
- // Vérification si le tri a été bien effectué
- if (VerifySort<data>(vectorTrie,size,compareFunc)) printf("OK\n");
- else printf("FAILED\n");
- }
-
- void VerificationTime()
- {
- // Démarrage du chrono
- chrono.Start();
-
- // Vérification des données triées
- VerifySort<data>(vectorTrie,size,compareFunc);
-
- // Récupération du temps écoulé
- float Time = chrono.GetDiff_ms();
-
- // Affichage du temps écoulé
- printf("> Etape de verification : %f ms\n",Time);
- }
-
- /*********************************************************************************************/
- void Test_with_RandomSort_and_SlowSort()
- {
- for (char method=NORMAL_SORT; method<=SHEAR_SORT; method++)
- ComparisonSort(method);
-
- for (; method<=FLASH_SORT; method++)
- KeySort(method);
- }
-
- void Test_without_RandomSort_neither_SlowSort()
- {
- for (char method=NORMAL_SORT; method<=SHEAR_SORT; method++)
- if (method<BOGO_SORT || (method>QUANTUM_BOGO_SORT && method!=STOOGE_SORT && method!=PERMUTATION_SORT))
- ComparisonSort(method);
-
- for (; method<=FLASH_SORT; method++)
- KeySort(method);
- }
-
- void InitSort(int n, int s, int m)
- {
- // Message d'initialisation
- size = s; maxvalue = m;
- printf("Test %d : cas d'un vecteur de %d valeurs comprises entre 0 et %d\n",n,size,maxvalue-1);
-
- // Choix de la taille du vecteur
- vector.resize(size);
-
- // Remplissage du vecteur
- for (int i=0; i<size; i++) vector[i] = data(rand()%m);
- }
-
- /*********************************************************************************************/
- main()
- {
- // Message de bienvenue
- printf("Bienvenue dans le test des algorithmes de tri d'un vecteur\n\n");
-
- // Initialisation du générateur pseudo aléatoire
- srand ( (unsigned int)time(NULL) );
-
- /**************************************************************************************************/
- InitSort(1,MAXSIZE_2,MAXVALUE_1);
- Test_with_RandomSort_and_SlowSort();
- printf("\n");
-
- /**************************************************************************************************/
- InitSort(2,MAXSIZE_3,MAXVALUE_2);
- Test_with_RandomSort_and_SlowSort();
- printf("\n");
-
- /**************************************************************************************************/
- InitSort(3,MAXSIZE_1,MAXVALUE_1);
- Test_without_RandomSort_neither_SlowSort();
- printf("\n");
-
- /**************************************************************************************************/
- InitSort(4,MAXSIZE_1,MAXVALUE_2);
- Test_without_RandomSort_neither_SlowSort();
- printf("\n");
-
- /**************************************************************************************************/
- VerificationTime();
- printf("\n");
- }
#include <cstdio>
#include <ctime>
#include "tri.h"
#include "chrono.h"
#define NODISP
#define MAXVALUE_1 256
#define MAXVALUE_2 2
#define MAXSIZE_1 4096
#define MAXSIZE_2 10
#define MAXSIZE_3 25
typedef int data; // A modifier pour essayer d'autres types de valeur
std::vector<data> vector, vectorTrie;
int size;
int maxvalue;
Chrono chrono;
/*********************************************************************************************/
inline int compareFunc(const void* elem1, const void* elem2)
{
if (*(data*)elem1 > *(data*)elem2) return 1;
else if (*(data*)elem1 < *(data*)elem2) return -1;
else return 0;
}
inline unsigned int keyFunc (const void *elem)
{
return unsigned int(*(data*)elem);
}
/*********************************************************************************************/
void ComparisonSort(char method)
{
// Nom du tri en cour
printf("> %s : ",NameOfSort(method).c_str());
// Préparation au tri
vectorTrie = vector;
chrono.Start();
// Tri
Sort<data>(method,vectorTrie,size,compareFunc);
// Récupération et affichage du temps écoulé
float Time = chrono.GetDiff_ms();
printf("%f ms > ",Time);
// Vérification si le tri a été bien effectué
if (VerifySort<data>(vectorTrie,size,compareFunc)) printf("OK\n");
else printf("FAILED\n");
}
void KeySort(char method)
{
// Nom du tri en cour
printf("> %s : ",NameOfSort(method).c_str());
// Préparation au tri
vectorTrie = vector;
chrono.Start();
// Tri
Sort<data,unsigned int>(method,vectorTrie,size,maxvalue,keyFunc);
// Récupération et affichage du temps écoulé
float Time = chrono.GetDiff_ms();
printf("%f ms > ",Time);
// Vérification si le tri a été bien effectué
if (VerifySort<data>(vectorTrie,size,compareFunc)) printf("OK\n");
else printf("FAILED\n");
}
void VerificationTime()
{
// Démarrage du chrono
chrono.Start();
// Vérification des données triées
VerifySort<data>(vectorTrie,size,compareFunc);
// Récupération du temps écoulé
float Time = chrono.GetDiff_ms();
// Affichage du temps écoulé
printf("> Etape de verification : %f ms\n",Time);
}
/*********************************************************************************************/
void Test_with_RandomSort_and_SlowSort()
{
for (char method=NORMAL_SORT; method<=SHEAR_SORT; method++)
ComparisonSort(method);
for (; method<=FLASH_SORT; method++)
KeySort(method);
}
void Test_without_RandomSort_neither_SlowSort()
{
for (char method=NORMAL_SORT; method<=SHEAR_SORT; method++)
if (method<BOGO_SORT || (method>QUANTUM_BOGO_SORT && method!=STOOGE_SORT && method!=PERMUTATION_SORT))
ComparisonSort(method);
for (; method<=FLASH_SORT; method++)
KeySort(method);
}
void InitSort(int n, int s, int m)
{
// Message d'initialisation
size = s; maxvalue = m;
printf("Test %d : cas d'un vecteur de %d valeurs comprises entre 0 et %d\n",n,size,maxvalue-1);
// Choix de la taille du vecteur
vector.resize(size);
// Remplissage du vecteur
for (int i=0; i<size; i++) vector[i] = data(rand()%m);
}
/*********************************************************************************************/
main()
{
// Message de bienvenue
printf("Bienvenue dans le test des algorithmes de tri d'un vecteur\n\n");
// Initialisation du générateur pseudo aléatoire
srand ( (unsigned int)time(NULL) );
/**************************************************************************************************/
InitSort(1,MAXSIZE_2,MAXVALUE_1);
Test_with_RandomSort_and_SlowSort();
printf("\n");
/**************************************************************************************************/
InitSort(2,MAXSIZE_3,MAXVALUE_2);
Test_with_RandomSort_and_SlowSort();
printf("\n");
/**************************************************************************************************/
InitSort(3,MAXSIZE_1,MAXVALUE_1);
Test_without_RandomSort_neither_SlowSort();
printf("\n");
/**************************************************************************************************/
InitSort(4,MAXSIZE_1,MAXVALUE_2);
Test_without_RandomSort_neither_SlowSort();
printf("\n");
/**************************************************************************************************/
VerificationTime();
printf("\n");
}
Conclusion
Dans la source, il me reste encore 2 tris à implémenter : le 'SpreadSort' et le 'LibrarySort'. Si quelqu'un a des suggestions à faire pour améliorer les méthodes implémentées dans cette source, ou même des idées pour en rajouter d'autres, n'hésitez pas, je complèterais la source.
Le tri d'une liste chainée ou d'une map n'a pas été implémenté. Seul les tableaux et les vecteurs sont utilisés.
Historique
- 14 janvier 2007 21:27:31 :
- Mise à jour du fichier PDF à propos de l'algorithme CombSort
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Complexité de l'algorithme de Tri Fusion [ par ousin ]
Salut tout le monde, je voudrais de l'aide pour demontrer mathematiquement en urilisant la resolution des reccurences que la complexité du Tri Fusion
Questions urgentes en Algorithme et Complexité [ par nostalgieing ]
bonjour j'ai une ambiguté en algorithme et complexité et j'ai quelques questions à poser et j'ai besoin de vos aide c'est urgent 1-quelle est la met
algorithme de tri hoare [ par alinformatik ]
au cours des travaux pratiques en module de système d'exploitation, pour comprendre la synchronisation des processus sous linux on nous a demandé d'éc
algorithme de tri par base en c [ par houda986 ]
salut; j'ai cherche d'algorithme en c et aucun idée pour faire ou démarrer en plus je suis débutante en c j'ai pas compris comment utiliser fonction
besoin d'aide dans programme en c [ par houda986 ]
salut; je suis un débutante en programmation et j'ai besoin d'aide pour la résolution d'un programme en C,c'est un programme de tri par base ... j'ai
algorithme tarjan [ par hassan116 ]
Bonjour, je viens faire appel à votre aide pour un problème sur un algorithme Tarjan de détection de composantes fortement connexes dans un graphe
algorithme RC5 [ par rahoub ]
salut à tous, svp je besoin d'un code source de l'algorithme de cryptographie RC5 développer sous matlab .J'attends vos aides et merci en avance :) je
[BAR]Recherche algorithme de reconnaissance de style [ par Lucky92 ]
Bonsoir tout le monde, J'aimerais savoir si quelqu'un connaît une application ou un algorihtme qui prendrait en entrée deux textes, et qui permettrai
algorithme zéro d'une fonction [ par louna12 ]
Bonsoir, pouvez-vous m'aider sur ce qui suit, svp? Écrire un algorithme qui calcule le zéro d’une fonction f(x) sur l’intervalle [a; b],
Décomposition LU [ par sdrh ]
Bonjour à tous, et merci d'avance à tout ceux qui m'apporteront des réponses. Je cherche un algorithme de décomposition LU d'une Matrice en CPP, et m
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|