From 5f5041663e6d5eb309fc0c5b8fa4e22b79db72f9 Mon Sep 17 00:00:00 2001 From: kara-mosr Date: Mon, 15 Sep 2025 14:34:48 +0200 Subject: [PATCH] tp1 --- bubblesort.c | 2 +- gmon.out | Bin 0 -> 4117 bytes quicksort.c | 38 ++++++++++++++++++++++++++++++++++++++ quicksort.h | 6 ++++++ reponses.txt | 23 +++++++++++++++++++++++ student_rank | Bin 0 -> 22864 bytes student_rank.c | 14 ++++++++------ 7 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 gmon.out create mode 100644 quicksort.c create mode 100644 quicksort.h create mode 100644 reponses.txt create mode 100755 student_rank diff --git a/bubblesort.c b/bubblesort.c index a848827..1e88188 100644 --- a/bubblesort.c +++ b/bubblesort.c @@ -17,5 +17,5 @@ void bubblesort(int* array, int length) swapped++; } } - } while(swapped==1); + } while(swapped>0); } diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..f119928fc610e838a4c0410f1499475d7d614df8 GIT binary patch literal 4117 zcmYe#&Cg?GzyVlfArda^3=Am@3=GAo$@zIH#SlRT1~>yIFiMYxz-S1JhQMeDjE2By z2#kinXb6mkz-S1JhQMeDjD`R$Lx8bC2x9zuNeIowz`(#LAOhhOibH4+m(f8K!YPu0 z&|sAtpn?t{B@B?hF5>|)hzfP6*`QuB;{~YTMr6ScP{CzT?O>G*P+QjvLyQ3nDqs^d wfC|PSt8~C7C;)YIhBU;?5|B3&&;;#4f)k*E^Pnohf*YWMFu#KZ4`2}l00ng!*8l(j literal 0 HcmV?d00001 diff --git a/quicksort.c b/quicksort.c new file mode 100644 index 0000000..b7365f3 --- /dev/null +++ b/quicksort.c @@ -0,0 +1,38 @@ +#include "quicksort.h" + +// Fonction utilitaire : échanger deux entiers +static void swap(int* a, int* b) +{ + int tmp = *a; + *a = *b; + *b = tmp; +} + +// Partition : divise le tableau autour du pivot +static int partition(int* A, int lo, int hi) +{ + int pivot = A[hi]; // pivot = dernier élément + int i = lo; + + for(int j = lo; j < hi; j++) + { + if(A[j] <= pivot) + { + swap(&A[i], &A[j]); + i++; + } + } + swap(&A[i], &A[hi]); // placer le pivot à la bonne position + return i; // index final du pivot +} + +// Quicksort récursif +void quicksort(int* A, int lo, int hi) +{ + if(lo >= hi || lo < 0) // vérification des bornes + return; + + int p = partition(A, lo, hi); + quicksort(A, lo, p - 1); // tri gauche + quicksort(A, p + 1, hi); // tri droite +} \ No newline at end of file diff --git a/quicksort.h b/quicksort.h new file mode 100644 index 0000000..a905b8e --- /dev/null +++ b/quicksort.h @@ -0,0 +1,6 @@ +#ifndef QUICKSORT_H +#define QUICKSORT_H + +void quicksort(int* array, int left, int right); + +#endif diff --git a/reponses.txt b/reponses.txt new file mode 100644 index 0000000..703ea62 --- /dev/null +++ b/reponses.txt @@ -0,0 +1,23 @@ +Commande utilisé : time ./student_rank 1000 1000 0 +~= 2.8s + +gprof ./student_rank + +Flat profile: temps et nombre d'appel par fonction + +Call graph : graphe d'appel, chaque fonction appel quel autre fonction et qui la appelé. Avec chaque métriques, nombre d'appel, temps. + +Grâce aux metriques, on peut voir que la fonction bubblesort est la plus lente visible dans le flat profile. C'est à cause d'un appel important dans find_rank_student visible dans le call graph. + +dans bubblesort mettre : +while(swapped>0); +Pour savoir si le tableau a bulle n'est pas subit de modification +(correction) + +suppression du 2eme bubblesort(grades,students_number); +bubblesort est beaucoup moins appelé + +remplacement de bubblesort avec heapsort +-> 0.107 (temps beaucoup plus court) + +Pour quicksort, pour qu'il soit meilleur, il faudrait faire un multi thread, pour qu'il puisse trier plusieur parti du tableau en même temps. \ No newline at end of file diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..a25da9809812df973da3d3353979b0eb3aefed16 GIT binary patch literal 22864 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 #include "heapsort.h" #include "bubblesort.h" +#include "quicksort.h" void generate_grades(int** students_array, int students_number, int grades_number) { @@ -55,14 +56,12 @@ int find_rank_student(int student_grade, int* grades_array, int students_number) { int position = -1; int i = 0; - bubblesort(grades_array,students_number); for(i = students_number-1; i >= 0; i--) { - if(grades_array[i] == student_grade) - { + if(grades_array[i] == student_grade){ position = students_number-i; - break; - } + break; + } } return position; } @@ -77,7 +76,8 @@ void sort_students(int** students_rank, int** students_array, int students_numbe { grades[j] = students_array[j][i]; } - bubblesort(grades,students_number); + quicksort(grades, 0, students_number - 1); + for(j = 0; j < students_number; j++) { students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number); @@ -86,6 +86,8 @@ void sort_students(int** students_rank, int** students_array, int students_numbe } } + + int main(int argc, char** argv) { int** student_grades = NULL;