From 0131edfaac174697a74bbb7e027256e5b07c1c12 Mon Sep 17 00:00:00 2001 From: ducreux Date: Wed, 10 Sep 2025 17:11:51 +0200 Subject: [PATCH] TD1 --- Rapport TD1.txt | 31 +++++++++++++++++++++++++++++++ bubblesort.c | 2 +- gmon.out | Bin 0 -> 3820 bytes student_rank | Bin 0 -> 21912 bytes student_rank.c | 4 ++-- 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 Rapport TD1.txt create mode 100644 gmon.out create mode 100755 student_rank diff --git a/Rapport TD1.txt b/Rapport TD1.txt new file mode 100644 index 0000000..9d17d25 --- /dev/null +++ b/Rapport TD1.txt @@ -0,0 +1,31 @@ +Rapport TD1 : + +J'ai compilé la commande : "gcc -g -pg -o student_rank student_rank.c heapsort.c bubblesort.c" ce qui a créé gmon.out en plus de compiler grâce +à -pg. + +Puis est lancer le code avec "./student_rank " les informations +qui seront utilisés tout le reste du TD sont 1000 étudiants, 1000 notes et mode 0. + +En ajoutant "time" devant la commande pour lancer le code l'on obtient le temps de l'exécution qui est de 3 secondes environ pour 1000 étudiants +et de plus de 1 minute pour 5000 étudiants. + +L'on utilise l'outil GPROF avec fait la commande "gprof student_rank". + +Gprof : +Flat profile = temps et nombre d'exécution par fonction +Call graph = arbre appel fonctions + temps et nombre d'exécution par fonction + +Fonction la plus lente = bubblesort + +Le problème vient du nombre d'appels de bubblesort donc il faudrait réduire son nombre d'appels. + +Dans student_rank un des appels de la fonction bubblesort est inutile, j'ai mis en commentaire l'appel de bubblesort ligne 58 de la fonction +find_rank_student dans student_rank.c. Le temps gagner est colossal. Mais un problème dans le classement car il n'est pas à 100% correct. + +L'on modifie dans bubblesort.c la ligne 20 à la place du "swapped==1" on met "swapped>0", mais du coup le code remet beaucoup de temps. + +Si l'on modifie à la ligne 80 du student_rank on change "bubblesort" par "heapsort" l'exécution est 10 fois plus rapide. +Dernière vérification avec GPROF pour voir s'il y a moyen d'optimiser plus (possiblement sift) + + +Recherche sur Wikipédia sur le Tri rapide. 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..7bd71d259e1bb8580f4e26092ed1507d5a80c0fa GIT binary patch literal 3820 zcmYe#&Cg?GzyVsMArep67#LC*7#NCElk@XZiXnmw3~&ZaV3ZyWfzc2c4S~@R7!85Z z5Eu;s%0qyKawCSl39#lH69WSSBLj%!Vc-C>2h!^xcfec*a|b9k4HC!tSQ*qA z7BYx1@G-D5$T9FUu!BWmDhbgrlR+jiF~E2bT?Sy2P{m+8Q22mc!OFnEuo$A80mNot zfSJMu7ByyIL^BmEJW4=AfDIaIpm+ocfnpmJh9EX56@q9`+<<6Mc!OwI96;njJctTN zh=cf`*kMG8Jy0xwWRUg4_#iO|hS&}gXJmlc29Y6-gt!Bt7GVa&WP}W{ESNr!-&h$y zu7datqMwO@e^8|^#s(pX!(K{4XaRKw21W-_2uBxLZ~;`%K?EYn@bD`u;{h=UM;&Sm zI3_MY1verKK7a}?gK7t>R1k+~j}eB@U_k?Hf&x&d{DexfD!4E)CZGvU5dY1@cmPfC I!_Kd)06YI4;{X5v literal 0 HcmV?d00001 diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..31da6fd1670db1248cb2b1e2995198008ec374fc GIT binary patch literal 21912 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 literal 0 HcmV?d00001 diff --git a/student_rank.c b/student_rank.c index af84003..95fe744 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); + //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);