diff --git a/Résultat.txt b/Résultat.txt new file mode 100644 index 0000000..069614a --- /dev/null +++ b/Résultat.txt @@ -0,0 +1,53 @@ +J'ai essayé avec 100000 étudiant et 10000 notes sans debug, ça prend beacoup de temps +Ensuite avec 1000 étudiant et 1000 notes, ça prend environ 3 secondes. +Puis avec 5 fois plus d'étudiant, ça prend 1 minutes et 18 secondes. + +Avec 1000 étudiants et 1000 notes sans debug on utilise gprof pour le profiling. +On peut voir que les fonctions qui prennent le plus de temps sont find_rank_student et bubblesort avec bubblesort qui prend 81.43 % du temps d'exécution. + + % cumulative self self total + time seconds seconds calls s/call s/call name + 81.43 2.39 2.39 1001000 0.00 0.00 bubblesort + 18.40 2.93 0.54 1000000 0.00 0.00 find_rank_student + 0.34 2.94 0.01 1 0.01 2.94 sort_students + 0.00 2.94 0.00 1000 0.00 0.00 generate_array + 0.00 2.94 0.00 2 0.00 0.00 free_array + 0.00 2.94 0.00 1 0.00 0.00 generate_grades + 0.00 2.94 0.00 1 0.00 0.00 generate_ranks + +index % time self children called name + 0.01 2.93 1/1 main [2] +[1] 100.0 0.01 2.93 1 sort_students [1] + 0.54 2.39 1000000/1000000 find_rank_student [3] + 0.00 0.00 1000/1001000 bubblesort [4] +----------------------------------------------- + +[2] 100.0 0.00 2.94 main [2] + 0.01 2.93 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.54 2.39 1000000/1000000 sort_students [1] +[3] 99.6 0.54 2.39 1000000 find_rank_student [3] + 2.39 0.00 1000000/1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1001000 sort_students [1] + 2.39 0.00 1000000/1001000 find_rank_student [3] +[4] 81.3 2.39 0.00 1001000 bubblesort [4] +----------------------------------------------- + 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] +----------------------------------------------- + +Il faut supprimer le bubblesort qui est dans la fonction find_rank_student pour gagner du temps sauf qu'on ne gagne pas assez de temps pour passer en dessous d'une secondes. \ No newline at end of file diff --git a/bubblesort.c b/bubblesort.c index a848827..7961fe4 100644 --- a/bubblesort.c +++ b/bubblesort.c @@ -14,7 +14,7 @@ void bubblesort(int* array, int length) tmp = array[i-1]; array[i-1] = array[i]; array[i] = tmp; - swapped++; + swapped = 1; } } } while(swapped==1); diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000..002973f Binary files /dev/null and b/gmon.out differ diff --git a/student_rank b/student_rank new file mode 100755 index 0000000..e6de7eb Binary files /dev/null and b/student_rank differ diff --git a/student_rank.c b/student_rank.c index af84003..c6dc75a 100644 --- a/student_rank.c +++ b/student_rank.c @@ -55,7 +55,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)