From 828e40575baff1b1197b88e35195d935681d9393 Mon Sep 17 00:00:00 2001 From: amary Date: Wed, 10 Sep 2025 17:22:37 +0200 Subject: [PATCH] Good Job ! --- Notes.txt | 9 ++++++++ bubblesort.c | 2 +- gmon.out | Bin 0 -> 3820 bytes student_rank.c | 58 +++++++++++++++++++++++++++++-------------------- 4 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 Notes.txt create mode 100644 gmon.out diff --git a/Notes.txt b/Notes.txt new file mode 100644 index 0000000..faeafce --- /dev/null +++ b/Notes.txt @@ -0,0 +1,9 @@ +On remarque un goulot d'étranglement sur la fonction "bubblesort" qui accapare les 3/4 du temps d'exécution global. +Après trois essais, on remarque que la proportion du temps utilisé par la fonction "bubblesort" varie de 75 à 80 %. Le reste étant utilisé par la fonction "find_rank_student". + +Il y a beaucoup d'appels à bubblesort. + +Correction de l'algorythme de trie à bulles et suppression de l'appel dans "find_rank_student". +Résultat : il y a moins d'appel mais c'est aussi long. + +Modifier l'algorythme de tri pour "heapsort" plus efficace avec les grands tableaux. \ 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 0000000000000000000000000000000000000000..53023b8ea0c8e2699d0f18ea65e0b750263a8d59 GIT binary patch literal 3820 zcmYe#&Cg?GzyVsMArep67#LC*7#NCElk@XZiXnmw3~&ZaV3ZyWfzc2c4S~@R7!85Z z5Eu=C(GZ}22tXQh5R(436Sk2Fu7sI^hk==anSp_UjRE9dgbZ8>Squ)aE|7^}237(j zD~MGFA_$U)utrJjA%HD}u!&*U%>a&ZeCqMZ;W86sDtY>Fn@FC_;BW=8Zf9%|f+&3{ z384kl85kHHL?IkqsNf4`1_s6jP(cR~h-AaG84QdE#2_4Xs4*blGhToSZbTM*02N#Y v)ecsvAP&(UBMhOzf(F= 0; i--) - { - if(grades_array[i] == student_grade) - { + //bubblesort(grades_array,students_number); + for(i = students_number-1; i >= 0; i--){ + if(grades_array[i] == student_grade){ position = students_number-i; break; - } + } } + return position; } -void sort_students(int** students_rank, int** students_array, int students_number, int grades_number) -{ +void sort_students(int** students_rank, int** students_array, int students_number, int grades_number){ int i = 0, j = 0; - for(i = 0; i < grades_number; i++) - { + for(i = 0; i < grades_number; i++){ int * grades = (int*) malloc(students_number*sizeof(int)); - for(j = 0; j < students_number; j++) - { - grades[j] = students_array[j][i]; - } - bubblesort(grades,students_number); - for(j = 0; j < students_number; j++) - { + for(j = 0; j < students_number; j++){ + grades[j] = students_array[j][i]; + } + 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); - } - free(grades); + } + free(grades); } + /* + int *grades = (int*) malloc(students_number, sizeof(int[2])); + + int i, g ; + const int c = 1 ; + for(i = 0 ; i < students_number ; i++){ + grades[i][0] = i ; + } + for(g = 0 ; g < grades_number ;g++){ + for(i = 0 ; i < students_number ; i++){ + grades[i][g+c] = student_grades[i][g] ; + } + + + } + + free_array(grades,students_number); + free(grades);*/ } int main(int argc, char** argv) @@ -103,8 +115,8 @@ int main(int argc, char** argv) grades_length = atoi(argv[2]); debug_mode = atoi(argv[3]); - student_grades = (int**) malloc(students_length*sizeof(int*)); - student_ranks = (int**) malloc(students_length*sizeof(int*)); + student_grades = (int**) malloc(students_length*sizeof(int*)); //notes + student_ranks = (int**) malloc(students_length*sizeof(int*)); //rands generate_grades(student_grades,students_length,grades_length); generate_ranks(student_ranks,students_length,grades_length);