From dd0498e9543255a31dbfd7b0aa5f93920e9686ae Mon Sep 17 00:00:00 2001 From: riera Date: Wed, 10 Sep 2025 17:24:01 +0200 Subject: [PATCH] TD1 --- Compte Rendu/README.md | 90 +++++++++++++++++++++++++++++++++++++++++ bubblesort.c | 4 +- gmon.out | Bin 0 -> 3966 bytes quicksort.c | 42 +++++++++++++++++++ quicksort.h | 8 ++++ student_rank | Bin 0 -> 22496 bytes student_rank.c | 4 +- 7 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 Compte Rendu/README.md create mode 100644 gmon.out create mode 100644 quicksort.c create mode 100644 quicksort.h create mode 100755 student_rank diff --git a/Compte Rendu/README.md b/Compte Rendu/README.md new file mode 100644 index 0000000..fe91989 --- /dev/null +++ b/Compte Rendu/README.md @@ -0,0 +1,90 @@ +# Test + +J'ai lancé l'algo avec 100k étudiants et 1k notes
+ça prends du temps... + +Pour 100 et 100 ça marche bien,
+pour 1k et 1k ça prends 3s~
+Pour 5k étudiants, ça a pris... pas eu le temps de finir
+ +On va donc prendre 1k étudiants et 1k notes pour le profiling
+ +
+ +# Partie gprof + +### Flat profile + +le temps et nombre dexecutions par fonction + +### Call graph + +Voir l'arbre d'appel, le temps et nombre d'appel par fonction + +## Analyse + +Le plus de temps a été pris par bubblesort + +
+Flat Profile + % cumulative self self total
+ time seconds seconds calls s/call s/call name
+ 78.10 2.30 2.30 1001000 0.00 0.00 bubblesort
+ 21.05 2.92 0.62 1000000 0.00 0.00 find_rank_student
+ 1.02 2.96 0.03 1 0.03 2.96 sort_students
+ 0.00 2.96 0.00 1000 0.00 0.00 generate_array
+ 0.00 2.96 0.00 2 0.00 0.00 free_array
+ 0.00 2.96 0.00 1 0.00 0.00 generate_grades
+ 0.00 2.96 0.00 1 0.00 0.00 generate_ranks
+
+
+
+Call Graph +index % time self children called name
+ 0.03 2.92 1/1 main [2]
+[1] 100.0 0.03 2.92 1 sort_students [1]
+ 0.62 2.30 1000000/1000000 find_rank_student [3]
+ 0.00 0.00 1000/1001000 bubblesort [4]
+-----------------------------------------------
+
+[2] 100.0 0.00 2.96 main [2]
+ 0.03 2.92 1/1 sort_students [1]
+ 0.00 0.00 2/2 free_array [6]
+ 0.00 0.00 1/1 generate_grades [7]
+ 0.00 0.00 1/1 generate_ranks [8]
+-----------------------------------------------
+ 0.62 2.30 1000000/1000000 sort_students [1]
+[3] 98.9 0.62 2.30 1000000 find_rank_student [3]
+ 2.30 0.00 1000000/1001000 bubblesort [4] <-- gros probleme ici
+-----------------------------------------------
+ 0.00 0.00 1000/1001000 sort_students [1]
+ 2.30 0.00 1000000/1001000 find_rank_student [3] <-- gros probleme ici
+[4] 78.0 2.30 0.00 1001000 bubblesort [4] <-- gros probleme ici
+-----------------------------------------------
+ 0.00 0.00 1000/1000 generate_grades [7]
+[5] 0.0 0.00 0.00 1000 generate_array [5]
+-----------------------------------------------
+ 0.00 0.00 2/2 main [2]
+[6] 0.0 0.00 0.00 2 free_array [6]
+-----------------------------------------------
+ 0.00 0.00 1/1 main [2]
+[7] 0.0 0.00 0.00 1 generate_grades [7]
+ 0.00 0.00 1000/1000 generate_array [5]
+-----------------------------------------------
+ 0.00 0.00 1/1 main [2]
+[8] 0.0 0.00 0.00 1 generate_ranks [8]
+-----------------------------------------------
+
+ + +## Changements dans le code + +Un bubblesort inutile se trouvait dans la fonction find_rank_student, après l'avoir retiré ça passe à 0.4s. +Mais maintenant c'est buggé + +pour faire ce changement il faut changer while(swapped==1); +car c'est possible qu'il faut faire plusieurs changements, donc il faut le changer en : while(swapped>0) + +# Passer au heapsort + +c'est rapide \ No newline at end of file diff --git a/bubblesort.c b/bubblesort.c index a848827..94071bf 100644 --- a/bubblesort.c +++ b/bubblesort.c @@ -17,5 +17,5 @@ void bubblesort(int* array, int length) swapped++; } } - } while(swapped==1); -} + } while(swapped>0); +} \ No newline at end of file diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..133922a4ac5c23529ae8d8eaf888adcf427865f1 GIT binary patch literal 3966 zcmYe#&Cg?GzyU&JAQBSn3=Am@3=GAo$@zIH#SlRT1~>yIFiMYxz-S1JhQMeDjE2By z2#kinXb6mk0D1^;Lj{-^xEQn<7#To~Pc|?Km7pU9vYU?9jaoGt0s|BRkbH*Aa(d+h z#s(pX6W&Wg=oick42%w<5Y7f^2n`n802Oo)fe1P{@iQ +#include + + +void swap(int* intArray, int num1, int num2) { + int temp = intArray[num1]; + intArray[num1] = intArray[num2]; + intArray[num2] = temp; +} + +int partition(int* intArray, int left, int right, int pivot) { + int leftPointer = left - 1; + int rightPointer = right; + while (true) { + while (intArray[++leftPointer] < pivot) { + //do nothing + } + while (rightPointer > 0 && intArray[--rightPointer] > pivot) { + //do nothing + } + + if (leftPointer >= rightPointer) { + break; + } else { + swap(intArray, leftPointer, rightPointer); + } + } + + swap(intArray, leftPointer, right); + return leftPointer; +} + +void quicksort(int* array, int left, int right) { + if (right - left <= 0) { + return; + } else { + int pivot = array[right]; + int partitionPoint = partition(array, left, right, pivot); + quicksort(array, left, partitionPoint - 1); + quicksort(array, partitionPoint + 1, right); + } +} \ No newline at end of file diff --git a/quicksort.h b/quicksort.h new file mode 100644 index 0000000..c12c751 --- /dev/null +++ b/quicksort.h @@ -0,0 +1,8 @@ +#ifndef __QUICKSORT__ +#define __QUICKSORT__ + +void quicksort(int* array, int left, int right); +int partition(int left, int right, int pivot); +void swap(int num1, int num2); + +#endif \ No newline at end of file diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..0a3566298530a20e82d24d284f8702d4273a37ae GIT binary patch literal 22496 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 literal 0 HcmV?d00001 diff --git a/student_rank.c b/student_rank.c index af84003..4a58727 100644 --- a/student_rank.c +++ b/student_rank.c @@ -5,6 +5,7 @@ #include #include "heapsort.h" #include "bubblesort.h" +#include "quicksort.h" void generate_grades(int** students_array, int students_number, int grades_number) { @@ -55,7 +56,6 @@ 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) @@ -77,7 +77,7 @@ 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);