init commit
This commit is contained in:
commit
dd25f1dd5e
19 changed files with 1218 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.idea/
|
7
CMakeLists.txt
Normal file
7
CMakeLists.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
cmake_minimum_required(VERSION 3.29)
|
||||||
|
project(algo_tri CXX)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
|
||||||
|
add_subdirectory(sort_lib)
|
||||||
|
add_subdirectory(src)
|
11
data/fic10
Normal file
11
data/fic10
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
10
|
||||||
|
2
|
||||||
|
8
|
||||||
|
5
|
||||||
|
6
|
||||||
|
1
|
||||||
|
4
|
||||||
|
7
|
||||||
|
0
|
||||||
|
3
|
||||||
|
9
|
101
data/fic100
Normal file
101
data/fic100
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
100
|
||||||
|
2
|
||||||
|
60
|
||||||
|
96
|
||||||
|
20
|
||||||
|
19
|
||||||
|
41
|
||||||
|
74
|
||||||
|
55
|
||||||
|
4
|
||||||
|
42
|
||||||
|
35
|
||||||
|
11
|
||||||
|
35
|
||||||
|
93
|
||||||
|
25
|
||||||
|
85
|
||||||
|
87
|
||||||
|
27
|
||||||
|
38
|
||||||
|
55
|
||||||
|
75
|
||||||
|
91
|
||||||
|
98
|
||||||
|
18
|
||||||
|
57
|
||||||
|
14
|
||||||
|
54
|
||||||
|
59
|
||||||
|
41
|
||||||
|
46
|
||||||
|
93
|
||||||
|
71
|
||||||
|
26
|
||||||
|
99
|
||||||
|
8
|
||||||
|
22
|
||||||
|
27
|
||||||
|
21
|
||||||
|
10
|
||||||
|
72
|
||||||
|
25
|
||||||
|
30
|
||||||
|
27
|
||||||
|
44
|
||||||
|
78
|
||||||
|
24
|
||||||
|
83
|
||||||
|
56
|
||||||
|
33
|
||||||
|
26
|
||||||
|
85
|
||||||
|
2
|
||||||
|
84
|
||||||
|
52
|
||||||
|
32
|
||||||
|
16
|
||||||
|
14
|
||||||
|
63
|
||||||
|
57
|
||||||
|
79
|
||||||
|
66
|
||||||
|
10
|
||||||
|
22
|
||||||
|
19
|
||||||
|
70
|
||||||
|
12
|
||||||
|
85
|
||||||
|
65
|
||||||
|
91
|
||||||
|
83
|
||||||
|
39
|
||||||
|
88
|
||||||
|
8
|
||||||
|
51
|
||||||
|
63
|
||||||
|
17
|
||||||
|
93
|
||||||
|
76
|
||||||
|
74
|
||||||
|
38
|
||||||
|
11
|
||||||
|
28
|
||||||
|
24
|
||||||
|
79
|
||||||
|
99
|
||||||
|
11
|
||||||
|
23
|
||||||
|
82
|
||||||
|
35
|
||||||
|
1
|
||||||
|
48
|
||||||
|
68
|
||||||
|
82
|
||||||
|
95
|
||||||
|
99
|
||||||
|
98
|
||||||
|
3
|
||||||
|
24
|
||||||
|
79
|
||||||
|
23
|
4
sort_lib/CMakeLists.txt
Normal file
4
sort_lib/CMakeLists.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
add_library(sort_lib STATIC
|
||||||
|
data.cpp
|
||||||
|
data.h
|
||||||
|
)
|
207
sort_lib/data.cpp
Normal file
207
sort_lib/data.cpp
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "data.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* f_lire_data */
|
||||||
|
/* int * f_lire_data(char *fichier, int *n); */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les entiers lus dans le fichier texte */
|
||||||
|
/* dans le fichier texte de nom [fichier] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [fichier] : nom du fichier texte contenant les données entieres */
|
||||||
|
/* première ligne : nombre [n] d'éléments à lire */
|
||||||
|
/* lignes suivantes : les [n] entiers à lire */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [n] : nombre entier d'éléments lus */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau de type int où sont stockés les entiers lus */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int *f_lire_data(char *fichier, int *n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
FILE *f;
|
||||||
|
int *tab;
|
||||||
|
|
||||||
|
/* Ouverture du fichier en lecture */
|
||||||
|
f = fopen(fichier, "rt");
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
printf("\n\nLecture <f_lire_data> :\nOuverture du fichier %s impossible\n\n", fichier);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Lecture du nombre d'éléments à lire */
|
||||||
|
fscanf (f, "%d\n", n);
|
||||||
|
|
||||||
|
|
||||||
|
/* Allocation de la mémoire nécessaire */
|
||||||
|
tab = (int *) calloc(*n, sizeof(int));
|
||||||
|
|
||||||
|
/* Lecture des n éléments */
|
||||||
|
for (i = 0; i < *n; i++)
|
||||||
|
fscanf (f, "%d\n", &tab[i]);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
return(tab);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* f_ecrire_data */
|
||||||
|
/* void f_ecrire_data(char *fichier, int *t, int n) */
|
||||||
|
/* */
|
||||||
|
/* Ecrire les [n] éléments de type entier du tableau [t] dans un fichier de */
|
||||||
|
/* type texte de nom [fichier] */
|
||||||
|
/* première ligne : nombre [n] d'éléments à lire */
|
||||||
|
/* lignes suivantes : les [n] entiers de [t] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [fichier] : nom du fichier */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void f_ecrire_data(char * fichier, int *t, int n)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Ouverture du fichier en écriture*/
|
||||||
|
f = fopen(fichier, "wt");
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
printf("\n\nEcriture <f_ecrire_data> :\nOuverture du fichier %s impossible\n\n", fichier);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(f, "%d\n", n);
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
fprintf(f, "%d\n", t[i]);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* ecrire_data */
|
||||||
|
/* void ecrire_data(int *t, int n) */
|
||||||
|
/* */
|
||||||
|
/* Ecrire les [n] éléments de type entier du tableau [t] sur stdout */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void ecrire_data(int *t, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
printf("%d\n", t[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* data_triee */
|
||||||
|
/* int *data_triee(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les [n] premiers entiers dans l'ordre */
|
||||||
|
/* et sans ex-aequo */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int *data_triee(int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int *t;
|
||||||
|
|
||||||
|
t = (int *) calloc(n, sizeof(int));
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
t[i] = i;
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* data_triee_inverse */
|
||||||
|
/* int *data_triee_inverse(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les [n] premiers entiers dans l'ordre */
|
||||||
|
/* inverse et sans ex-aequo */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int *data_triee_inverse(int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int *t;
|
||||||
|
t = (int *) calloc(n, sizeof(int));
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
t[n-1-i] = i;
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* random_data */
|
||||||
|
/* int *random_data(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant [n] nombres entiers aléatoires */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int *random_data(int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int pid;
|
||||||
|
int *t;
|
||||||
|
|
||||||
|
pid = getpid ();
|
||||||
|
srand(pid);
|
||||||
|
|
||||||
|
t = (int *) calloc(n, sizeof(int));
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
t[i] = 1+(int) ((double) n *rand()/(RAND_MAX+1.0));
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
125
sort_lib/data.h
Normal file
125
sort_lib/data.h
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* f_lire_data */
|
||||||
|
/* int * f_lire_data(char *fichier, int *n); */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les entiers lus dans le fichier texte */
|
||||||
|
/* dans le fichier texte de nom [fichier] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [fichier] : nom du fichier texte contenant les données entieres */
|
||||||
|
/* première ligne : nombre [n] d'éléments à lire */
|
||||||
|
/* lignes suivantes : les [n] entiers à lire */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [n] : nombre entier d'éléments lus */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau de type int où sont stockés les entiers lus */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int * f_lire_data(char *fichier, int *n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* f_ecrire_data */
|
||||||
|
/* void f_ecrire_data(char *fichier, int *t, int n) */
|
||||||
|
/* */
|
||||||
|
/* Ecrire les [n] éléments de type entier du tableau [t] dans un fichier de */
|
||||||
|
/* type texte de nom [fichier] */
|
||||||
|
/* première ligne : nombre [n] d'éléments à lire */
|
||||||
|
/* lignes suivantes : les [n] entiers de [t] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [fichier] : nom du fichier */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void f_ecrire_data(char *fichier, int *t, int n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* ecrire_data */
|
||||||
|
/* void ecrire_data(int *t, int n) */
|
||||||
|
/* */
|
||||||
|
/* Ecrire les [n] éléments de type entier du tableau [t] sur stdout */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void ecrire_data(int *t, int n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* data_triee */
|
||||||
|
/* int *data_triee(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les [n] premiers entiers dans l'ordre */
|
||||||
|
/* et sans ex-aequo */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int * data_triee(int n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* data_triee_inverse */
|
||||||
|
/* int *data_triee_inverse(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant les [n] premiers entiers dans l'ordre */
|
||||||
|
/* inverse et sans ex-aequo */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int * data_triee_inverse(int n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* random_data */
|
||||||
|
/* int *random_data(int n) */
|
||||||
|
/* */
|
||||||
|
/* Créer un tableau [t] contenant [n] nombres entiers aléatoires */
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [n] : nombre d'entiers du tableau à créer */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int * random_data(int n);
|
||||||
|
|
||||||
|
|
||||||
|
|
150
sort_lib/tris.c
Normal file
150
sort_lib/tris.c
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "tris.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* echanger */
|
||||||
|
/* void echanger(int *t, int n1, int n2) */
|
||||||
|
/* */
|
||||||
|
/* Echanger les éléments d'indice [n1] et [n2] du tableau d'entiers [t] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n1] : indice */
|
||||||
|
/* - [n2] : indice */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void echanger(int *t, int n1, int n2)
|
||||||
|
{
|
||||||
|
int inter;
|
||||||
|
|
||||||
|
inter = t[n1];
|
||||||
|
t[n1] = t[n2];
|
||||||
|
t[n2] = inter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* tri_[algo_tri] */
|
||||||
|
/* void tri_[algo_tri] (int *t, int n, structSondes *complexite) */
|
||||||
|
/* */
|
||||||
|
/* Trier le tableau d'entiers [t] à [n] éléments */
|
||||||
|
/* [algo_tri] : bulle_naif, bulle_bool, bulle_opt, selection, insertion */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [sondes] : structure résultat des sondes sur l'algorithme */
|
||||||
|
/* sondes.nb_comparaisons */
|
||||||
|
/* sondes.nb_echanges */
|
||||||
|
/* sondes.nb_copies */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
structSondes tri_bulle_naif(int *t, int n)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
structSondes tri_bulle_bool(int *t, int n)
|
||||||
|
{
|
||||||
|
// A faire : utilisation d'un drapeau (booléen) qui teste que les données sont triées
|
||||||
|
// en une lecture des données
|
||||||
|
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
structSondes tri_bulle_opt(int *t, int n)
|
||||||
|
{
|
||||||
|
// A faire : on teste l'endroit du dernier échange pour modifier la boucle principale.
|
||||||
|
// Si le dernier échange est entre t_0 et t_1 alors on a terminé.
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
structSondes tri_selection(int *t, int n)
|
||||||
|
{
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
structSondes tri_insertion(int *t, int n)
|
||||||
|
{
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* tri_rapide */
|
||||||
|
/* void tri_rapide (int *t, int gauche, int droite, structSondes *complexite)*/
|
||||||
|
/* */
|
||||||
|
/* Trier la portion du tableau d'entiers [t] comprise entre les indices */
|
||||||
|
/* [gauche] et [droite] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [gauche] : indice gauche */
|
||||||
|
/* - [droit] : indice droit */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [sondes] : structure résultat des sondes sur l'algorithme */
|
||||||
|
/* sondes.nb_comparaisons */
|
||||||
|
/* sondes.nb_echanges */
|
||||||
|
/* sondes.nb_copies */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
structSondes tri_rapide(int *t, int gauche, int droite)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
return sondes;
|
||||||
|
|
||||||
|
}
|
92
sort_lib/tris.h
Normal file
92
sort_lib/tris.h
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
|
||||||
|
/* Divers */
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Eléments d'analyse */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long int nb_echanges;
|
||||||
|
long int nb_comparaisons;
|
||||||
|
long int nb_copies;
|
||||||
|
} structSondes;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* echanger */
|
||||||
|
/* void echanger(int *t, int n1, int n2) */
|
||||||
|
/* */
|
||||||
|
/* Echanger les éléments d'indice [n1] et [n2] du tableau d'entiers [t] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n1] : indice */
|
||||||
|
/* - [n2] : indice */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void echanger(int *t, int n1, int n2);
|
||||||
|
|
||||||
|
|
||||||
|
/* Algorithmes de tris */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* tri_[algo_tri] */
|
||||||
|
/* int tri_[algo_tri] (int *t, int n, structSondes *complexite) */
|
||||||
|
/* */
|
||||||
|
/* Trier le tableau d'entiers [t] à [n] éléments */
|
||||||
|
/* [algo_tri] : bulle_naif, bulle_bool, bulle_opt, selection, insertion */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [n] : nombre d'entiers du tableau */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [sondes] : structure résultat des sondes sur l'algorithme */
|
||||||
|
/* complexite->nb_comparaisons */
|
||||||
|
/* complexite->nb_echanges */
|
||||||
|
/* complexite->nb_copies */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
structSondes tri_bulle_naif(int *t, int n);
|
||||||
|
structSondes tri_bulle_bool(int *t, int n);
|
||||||
|
structSondes tri_bulle_opt(int *t, int n);
|
||||||
|
|
||||||
|
structSondes tri_insertion(int *t, int n);
|
||||||
|
structSondes tri_selection(int *t, int n);
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* tri_[algo_tri] */
|
||||||
|
/* int tri_rapide (int *t, int gauche, int droite, structSondes *complexite) */
|
||||||
|
/* */
|
||||||
|
/* Trier la portion du tableau d'entiers [t] comprise entre les indices */
|
||||||
|
/* [gauche] et [droite] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* - [gauche] : indice gauche */
|
||||||
|
/* - [gauche] : indice droit */
|
||||||
|
/* */
|
||||||
|
/* Modifications : */
|
||||||
|
/* - [t] : tableau d'entiers */
|
||||||
|
/* */
|
||||||
|
/* Sorties : */
|
||||||
|
/* - [sondes] : structure résultat des sondes sur l'algorithme */
|
||||||
|
/* complexite->nb_comparaisons */
|
||||||
|
/* complexite->nb_echanges */
|
||||||
|
/* complexite->nb_copies */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
structSondes tri_rapide(int *t, int gauche, int droite);
|
||||||
|
|
||||||
|
|
348
sort_lib/utilisation.c
Normal file
348
sort_lib/utilisation.c
Normal file
|
@ -0,0 +1,348 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "tris.h"
|
||||||
|
#include "data.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Type des données à trier */
|
||||||
|
#define UNKNOWN 0
|
||||||
|
#define FICHIER 1
|
||||||
|
#define RANDOM 2
|
||||||
|
#define TRIE 3
|
||||||
|
#define TRIE_INVERSE 4
|
||||||
|
|
||||||
|
|
||||||
|
/* Type de tri à utiliser */
|
||||||
|
/* Numéro XY, X pour la famille, Y pour la version */
|
||||||
|
#define BULLE_NAIF 11
|
||||||
|
#define BULLE_BOOL 12
|
||||||
|
#define BULLE_OPT 13
|
||||||
|
#define SELECTION 2
|
||||||
|
#define INSERTION 3
|
||||||
|
#define TRIRAPIDE 4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* analyse_complexite */
|
||||||
|
/* void analyse_complexite(complexiteDef *complexite, char * tri) */
|
||||||
|
/* */
|
||||||
|
/* Afficher les différentes options du programme [nom] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* [complexite] : le résultat en terme de complexité du tri */
|
||||||
|
/* [tri] : le nom du tri */
|
||||||
|
/* [n] : le nombre d'éléments triés */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void analyse_complexite(structSondes sondes, char *tri, int n)
|
||||||
|
{
|
||||||
|
printf("\nAnalyse de la complexite du tri %s de %d entiers\n", tri, n);
|
||||||
|
printf("\t nombre de comparaisons = %ld\n", sondes.nb_comparaisons);
|
||||||
|
printf("\t nombre de copies = %ld\n", sondes.nb_copies);
|
||||||
|
printf("\t nombre d'échanges = %ld\n", sondes.nb_echanges);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* aide */
|
||||||
|
/* int aide(char * nom) */
|
||||||
|
/* */
|
||||||
|
/* Afficher les différentes options du programme [nom] */
|
||||||
|
/* */
|
||||||
|
/* Entrées : */
|
||||||
|
/* [nom] : le nom de l'exécutable */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void aide(char *nom)
|
||||||
|
{
|
||||||
|
printf("\nUtilisation :\n\n %s [options]\n", nom);
|
||||||
|
|
||||||
|
printf("\nOptions :\n");
|
||||||
|
printf("\n[1] Pour les données (des entiers):\n");
|
||||||
|
printf("\n - lues dans un Fichier texte : -f nom_fichier\n");
|
||||||
|
printf("\n où nom_fichier est le nom d'un fichier texte de la forme\n");
|
||||||
|
printf("\n nombre_elements");
|
||||||
|
printf("\n entier1");
|
||||||
|
printf("\n entier2");
|
||||||
|
printf("\n ...");
|
||||||
|
printf("\n entiern");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n - crées Aléatoirement : -a nombre_elements\n");
|
||||||
|
printf("\n où nombre_elements est le nombre d'éléments du tableau créé\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n - déjà triées (Meilleur des Cas) : -mc nombre_elements\n");
|
||||||
|
printf("\n où nombre_elements est le nombre d'éléments du tableau créé\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n - triées dans l'ordre inverse (Pire des Cas) : -pc nombre_elements\n");
|
||||||
|
printf("\n où nombre_elements est le nombre d'éléments du tableau créé\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n - pour sauver la tableau initial dans un fichier texte : -si nom_fichier\n");
|
||||||
|
printf("\n où nom_fichier est le nom d'un fichier\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n - pour sauver la tableau final dans un fichier texte : -sf nom_fichier\n");
|
||||||
|
printf("\n où nom_fichier est le nom d'un fichier\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n[2] Pour l'algorithme de Tri :");
|
||||||
|
printf("\n -t algo\n");
|
||||||
|
printf("\n où algo = bulle_naif, bulle_bool, bulle_opt, selection, insertion, rapide\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\nExemples :\n\n");
|
||||||
|
printf("\n données lues dans le fichier tab1.dat et triées avec bulle naïf");
|
||||||
|
printf("\n -f tab1.dat -t bulle_naif\n");
|
||||||
|
printf("\n -t bulle_naif -f tab1.dat\n\n");
|
||||||
|
printf("\n 10 données créées aléatoirement et triées avec insertion");
|
||||||
|
printf("\n -a 10 -t insertion\n");
|
||||||
|
printf("\n -t insertion -a 10\n\n");
|
||||||
|
printf("\n 8 données dans l'ordre inverse, triées avec tri rapide, sauvées dans tab1.dat");
|
||||||
|
printf("\n -pc 8 -t rapide -sf tab1.dat\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("\n[3] Pour afficher ou non les tableaux : ");
|
||||||
|
printf("\n -v (par défaut on n'affiche pas)\n");
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int main(int argn, char *argv[])
|
||||||
|
{
|
||||||
|
int type_data;
|
||||||
|
int type_tri;
|
||||||
|
int sauvegarde_tableau_initial;
|
||||||
|
int sauvegarde_tableau_final;
|
||||||
|
int affichage_tableaux;
|
||||||
|
int n = 0;
|
||||||
|
char *fichier_lecture_tableau_initial, *fichier_sauvegarde_tableau_initial, *fichier_sauvegarde_tableau_final;
|
||||||
|
int *tab;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
structSondes sondes = {0, 0, 0};
|
||||||
|
|
||||||
|
if (argn == 1)
|
||||||
|
{
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_data = UNKNOWN;
|
||||||
|
type_tri = UNKNOWN;
|
||||||
|
sauvegarde_tableau_initial = FALSE;
|
||||||
|
sauvegarde_tableau_final = FALSE;
|
||||||
|
affichage_tableaux = FALSE;
|
||||||
|
|
||||||
|
for ( i = 1; i < argn; i+=2 )
|
||||||
|
{
|
||||||
|
// choix des données à trier et des sauvegardes éventuelles du tableau initial et final
|
||||||
|
if (strcmp("-f", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
fichier_lecture_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
|
||||||
|
strcpy(fichier_lecture_tableau_initial, argv[i+1]);
|
||||||
|
type_data = FICHIER;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-si", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
fichier_sauvegarde_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
|
||||||
|
strcpy(fichier_sauvegarde_tableau_initial, argv[i+1]);
|
||||||
|
sauvegarde_tableau_initial = TRUE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-sf", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
fichier_sauvegarde_tableau_final = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
|
||||||
|
strcpy(fichier_sauvegarde_tableau_final, argv[i+1]);
|
||||||
|
sauvegarde_tableau_final = TRUE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-a", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
n = atoi(argv[i+1]);
|
||||||
|
type_data = RANDOM;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-mc", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
n = atoi(argv[i+1]);
|
||||||
|
type_data = TRIE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-pc", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
n = atoi(argv[i+1]);
|
||||||
|
type_data = TRIE_INVERSE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// choix de l'algorithme de tri
|
||||||
|
if (strcmp("-t", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
if (strcmp("bulle_naif", argv[i+1]) == 0)
|
||||||
|
type_tri = BULLE_NAIF;
|
||||||
|
|
||||||
|
else if (strcmp("bulle_bool", argv[i+1]) == 0)
|
||||||
|
type_tri = BULLE_BOOL;
|
||||||
|
|
||||||
|
else if (strcmp("bulle_opt", argv[i+1]) == 0)
|
||||||
|
type_tri = BULLE_OPT;
|
||||||
|
|
||||||
|
else if (strcmp("selection", argv[i+1]) == 0)
|
||||||
|
type_tri = SELECTION;
|
||||||
|
|
||||||
|
else if (strcmp("insertion", argv[i+1]) == 0)
|
||||||
|
type_tri = INSERTION;
|
||||||
|
|
||||||
|
else if (strcmp("rapide", argv[i+1]) == 0)
|
||||||
|
type_tri = TRIRAPIDE;
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\t le tri demandé < %s > n'existe pas \n", argv[i+1]);
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// choix de la visualisation (affichage) du tableau initial et final
|
||||||
|
if (strcmp("-v", argv[i]) == 0)
|
||||||
|
{
|
||||||
|
affichage_tableaux = TRUE;
|
||||||
|
i--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\t l'option demandée < %s > n'existe pas \n", argv[i]);
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch(type_data)
|
||||||
|
{
|
||||||
|
case TRIE:
|
||||||
|
{
|
||||||
|
tab = data_triee(n);
|
||||||
|
printf("Tableau initial trié (meilleur des cas)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TRIE_INVERSE:
|
||||||
|
{
|
||||||
|
tab = data_triee_inverse(n);
|
||||||
|
printf("Tableau intial trié en ordre inverse (pire des cas)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FICHIER:
|
||||||
|
{
|
||||||
|
tab = f_lire_data(fichier_lecture_tableau_initial, &n);
|
||||||
|
printf("Tableau initial lu dans %s", fichier_lecture_tableau_initial);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RANDOM:
|
||||||
|
{
|
||||||
|
tab = random_data(n);
|
||||||
|
printf("Tableau initial aléatoire");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UNKNOWN:
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (n < 1) {
|
||||||
|
printf("\t le nombre d'éléments à trier est incorrect : %d \n", n);
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sauvegarde_tableau_initial == TRUE)
|
||||||
|
f_ecrire_data(fichier_sauvegarde_tableau_initial, tab, n);
|
||||||
|
|
||||||
|
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(type_tri)
|
||||||
|
{
|
||||||
|
case BULLE_NAIF:
|
||||||
|
sondes = tri_bulle_naif(tab, n);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (bulle naïf)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "bulle naïf", n);
|
||||||
|
break;
|
||||||
|
case BULLE_BOOL:
|
||||||
|
sondes = tri_bulle_bool(tab, n);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (bulle bool)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "bulle bool", n);
|
||||||
|
break;
|
||||||
|
case BULLE_OPT:
|
||||||
|
sondes = tri_bulle_opt(tab, n);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (bulle opt)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "bulle opt", n);
|
||||||
|
break;
|
||||||
|
case SELECTION:
|
||||||
|
sondes = tri_selection(tab, n);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (selection)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "selection", n);
|
||||||
|
break;
|
||||||
|
case INSERTION:
|
||||||
|
sondes = tri_insertion(tab, n);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (insertion)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "insertion", n);
|
||||||
|
break;
|
||||||
|
case TRIRAPIDE:
|
||||||
|
sondes = tri_rapide(tab, 0, n-1);
|
||||||
|
if (affichage_tableaux == TRUE) {
|
||||||
|
printf("Tableau trié (rapide)\n");
|
||||||
|
ecrire_data(tab, n);
|
||||||
|
}
|
||||||
|
analyse_complexite(sondes, "rapide", n);
|
||||||
|
break;
|
||||||
|
case UNKNOWN:
|
||||||
|
aide(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sauvegarde_tableau_final == TRUE)
|
||||||
|
f_ecrire_data(fichier_sauvegarde_tableau_final, tab, n);
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
32
src/AlgoBench.cpp
Normal file
32
src/AlgoBench.cpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include "AlgoBench.h"
|
||||||
|
|
||||||
|
BenchResult AlgoBench::bench(std::function<Probes(const std::vector<int>&)> alg_func, int test_depth) {
|
||||||
|
BenchResult results{};
|
||||||
|
|
||||||
|
auto best_data = to_vector(data_triee(test_depth)); // Already sorted
|
||||||
|
auto mid_data = to_vector(random_data(test_depth)); // Random sorted
|
||||||
|
auto worst_data = to_vector(data_triee_inverse(test_depth)); // Sorted inversed
|
||||||
|
|
||||||
|
auto tc = TimeCounter{};
|
||||||
|
|
||||||
|
tc.start();
|
||||||
|
Probes res = alg_func(best_data);
|
||||||
|
tc.stop();
|
||||||
|
results.best_case_time = tc.get_us();
|
||||||
|
results.best_case = res;
|
||||||
|
|
||||||
|
tc.start();
|
||||||
|
res = alg_func(mid_data);
|
||||||
|
tc.stop();
|
||||||
|
results.mid_case_time = tc.get_us();
|
||||||
|
results.mid_case = res;
|
||||||
|
|
||||||
|
tc.start();
|
||||||
|
res = alg_func(worst_data);
|
||||||
|
tc.stop();
|
||||||
|
results.worst_case_time = tc.get_us();
|
||||||
|
results.worst_case = res;
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
30
src/AlgoBench.h
Normal file
30
src/AlgoBench.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef ALGO_TRI_ALGOBENCH_H
|
||||||
|
#define ALGO_TRI_ALGOBENCH_H
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "utils.hpp"
|
||||||
|
#include "data.h"
|
||||||
|
#include "TimeCounter.h"
|
||||||
|
|
||||||
|
struct BenchResult {
|
||||||
|
long worst_case_time;
|
||||||
|
long mid_case_time;
|
||||||
|
long best_case_time;
|
||||||
|
|
||||||
|
Probes worst_case;
|
||||||
|
Probes mid_case;
|
||||||
|
Probes best_case;
|
||||||
|
};
|
||||||
|
|
||||||
|
class AlgoBench{
|
||||||
|
public:
|
||||||
|
AlgoBench() = default;
|
||||||
|
~AlgoBench() = default;
|
||||||
|
|
||||||
|
BenchResult bench(std::function<Probes(const std::vector<int>&)> alg_func, int test_depth);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //ALGO_TRI_ALGOBENCH_H
|
13
src/CMakeLists.txt
Normal file
13
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
add_executable(sort_utils
|
||||||
|
main.cpp
|
||||||
|
utils.hpp
|
||||||
|
AlgoBench.cpp
|
||||||
|
AlgoBench.h
|
||||||
|
sort_functions.h
|
||||||
|
sort_function.cpp
|
||||||
|
TimeCounter.cpp
|
||||||
|
TimeCounter.h
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(sort_utils PUBLIC sort_lib)
|
||||||
|
target_include_directories(sort_utils PUBLIC ${CMAKE_SOURCE_DIR}/sort_lib)
|
15
src/TimeCounter.cpp
Normal file
15
src/TimeCounter.cpp
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#include "TimeCounter.h"
|
||||||
|
|
||||||
|
void TimeCounter::start() {
|
||||||
|
m_start = std::chrono::high_resolution_clock::now();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimeCounter::stop() {
|
||||||
|
m_stop = std::chrono::high_resolution_clock::now();
|
||||||
|
m_duration = std::chrono::duration_cast<std::chrono::microseconds>(m_stop - m_start).count();
|
||||||
|
}
|
||||||
|
|
||||||
|
long TimeCounter::get_us() const {
|
||||||
|
return m_duration;
|
||||||
|
}
|
||||||
|
|
25
src/TimeCounter.h
Normal file
25
src/TimeCounter.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef TIMECOUNTER_H
|
||||||
|
#define TIMECOUNTER_H
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
class TimeCounter {
|
||||||
|
public:
|
||||||
|
TimeCounter() = default;
|
||||||
|
~TimeCounter() = default;
|
||||||
|
|
||||||
|
void start();
|
||||||
|
void stop();
|
||||||
|
|
||||||
|
long get_us() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> m_start;
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> m_stop;
|
||||||
|
|
||||||
|
long m_duration;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //TIMECOUNTER_H
|
5
src/main.cpp
Normal file
5
src/main.cpp
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
|
}
|
19
src/sort_function.cpp
Normal file
19
src/sort_function.cpp
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#include "AlgoBench.h"
|
||||||
|
|
||||||
|
Probes tri_bulle(const std::vector<int>& data) {
|
||||||
|
Probes probes{0, 0, 0};
|
||||||
|
|
||||||
|
for(int i = data.size(); i <= 0; i--) {
|
||||||
|
for(int j = 0; j < i; j++) {
|
||||||
|
|
||||||
|
if(data[j] > data[j + 1]) {
|
||||||
|
swap(data, i, j);
|
||||||
|
|
||||||
|
probes.nComp++;
|
||||||
|
probes.nSwaps++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return probes;
|
||||||
|
}
|
11
src/sort_functions.h
Normal file
11
src/sort_functions.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef ALGO_TRI_SORT_FUNCTIONS_H
|
||||||
|
#define ALGO_TRI_SORT_FUNCTIONS_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "utils.hpp"
|
||||||
|
|
||||||
|
Probes tri_bulle(const std::vector<int>& data);
|
||||||
|
Probes tri_bulle_flagged(const std::vector<int>& data);
|
||||||
|
Probes tri_bulle_opti(std::vector<int>& data);
|
||||||
|
|
||||||
|
#endif //ALGO_TRI_SORT_FUNCTIONS_H
|
22
src/utils.hpp
Normal file
22
src/utils.hpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef ALGO_TRI_UTILS_HPP
|
||||||
|
#define ALGO_TRI_UTILS_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct Probes {
|
||||||
|
int nComp;
|
||||||
|
int nCopy;
|
||||||
|
int nSwaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
std::vector<T> to_vector(T* c_array) {
|
||||||
|
return std::vector<T>(std::begin(c_array), std::end(c_array));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void swap(const std::vector<T>& src, int a, int b) {
|
||||||
|
std::swap(src.begin() + a, src.begin() + b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //ALGO_TRI_UTILS_HPP
|
Loading…
Reference in a new issue