diff --git a/Rapport.txt b/Rapport.txt new file mode 100644 index 0000000..cf5edca --- /dev/null +++ b/Rapport.txt @@ -0,0 +1,26 @@ +Rapport TD1 : + +j'ai compilé le code avec la commande : +gcc -g -pg -o student_rank student_rank.c heapsort.c bubblesort.c + +J'ai exécuté le programme avec différents nombres d'étudiants et de notes avec la commande suivante : +./student_rank + +On remarque qu'avec 1000 étudiants et 1000 notes, le temps est d'environ 3 secondes et avec 5000 étudiants et 1000 notes, nous avons environ +1 minute 25, ce qui montre que le temps d'exécution est exponentiel. + +Ensuite j'ai utilisé l'outil prof pour analyser le programme : + +Flat profile -> le temps et le nombre d'exécution +Call graph -> Voir l'arbre d'appel fonction + le temps et le nombre d'exécution + +La fonction la plus longue est bubblesort, Nbr d'appel important + +j'ai enlevé l'appel de la fonction bubblesort cela réduit le nombre d'appels et on gagne un tout petit peu de temps, mais il y a un bug + +Le bug de tri vient de la fonction bubblesort car le Swapped était = 1 donc j'ai modifié le et mis swepped > 0. + +Quand je remplace le bublesort par le heapsort on gagne beaucoup de temps. + +Après dernière vérification avec Gprof, on remarque qu'il ne manque quasiment plus grand-chose pour optimiser car la vitesse d'exécution +est très rapide \ No newline at end of file diff --git a/bubblesort.c b/bubblesort.c index a848827..2ad5aaa 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 0000000..895dcc1 Binary files /dev/null and b/gmon.out differ diff --git a/student_rank b/student_rank new file mode 100755 index 0000000..cd848b3 Binary files /dev/null and b/student_rank differ diff --git a/student_rank.c b/student_rank.c index af84003..b9be95b 100644 --- a/student_rank.c +++ b/student_rank.c @@ -55,7 +55,7 @@ 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); + heapsort(grades,students_number); for(j = 0; j < students_number; j++) { students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number);