From 6e97f7470ea0d17e7cbffe10acc4cc69e9810c7e Mon Sep 17 00:00:00 2001 From: raban Date: Wed, 10 Sep 2025 17:25:08 +0200 Subject: [PATCH] version Hugo Raban --- bubblesort.c | 2 +- gmon.out | Bin 0 -> 4155 bytes qiktri.c | 76 ++++++++++++++++++++++++++++++++ qiktri.h | 7 +++ rapport_Hugo_raban | 107 +++++++++++++++++++++++++++++++++++++++++++++ student_rank | Bin 0 -> 28896 bytes student_rank.c | 62 +++++++++++++++----------- 7 files changed, 228 insertions(+), 26 deletions(-) create mode 100644 gmon.out create mode 100644 qiktri.c create mode 100644 qiktri.h create mode 100644 rapport_Hugo_raban create mode 100755 student_rank 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..bf7cb34874f4cf14870673dbb31108865e852f60 GIT binary patch literal 4155 zcmYe#&Cg?GzyX%XLL_q785mL+7#NCElk@XZiXnmw3~&ZaV3ZyWfzc2c4S~@R7!85Z z5Eu=C(GVC7fzc2c4S~@R7!84;6atJ3gdomMl!DN#3=9m61|ks7V{r)01rppK3gI}* zKxj~3no&Uv!byPYfM|zmbBCG@Rv7>lyofBA02TZS)ectK02Mqh3^5xlI02jB0;pgO evdRtE1QVc+W|D@O$pZ3G15^;^Be38EEP?= low && array[j] > key) + { + array[j + 1] = array[j]; + j--; + } + array[j + 1] = key; + } +} + +static int partition_qiktri(int* array, int low, int high) +{ + int mid = low + (high - low) / 2; + + // médiane de trois pour choisir un bon pivot + if (array[mid] < array[low]) { + int tmp = array[mid]; array[mid] = array[low]; array[low] = tmp; + } + if (array[high] < array[low]) { + int tmp = array[high]; array[high] = array[low]; array[low] = tmp; + } + if (array[mid] < array[high]) { + int tmp = array[mid]; array[mid] = array[high]; array[high] = tmp; + } + + int pivot = array[high]; + int i = low - 1; + for (int j = low; j < high; j++) + { + if (array[j] <= pivot) + { + i++; + int temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + + int temp = array[i + 1]; + array[i + 1] = array[high]; + array[high] = temp; + + return i + 1; +} + +void qiktri(int* array, int low, int high) // ⬅️ plus de "static" +{ + while (low < high) + { + if (high - low < 16) + { + insertion_sort(array, low, high); + break; + } + + int pi = partition_qiktri(array, low, high); + + if (pi - low < high - pi) + { + qiktri(array, low, pi - 1); + low = pi + 1; + } + else + { + qiktri(array, pi + 1, high); + high = pi - 1; + } + } +} \ No newline at end of file diff --git a/qiktri.h b/qiktri.h new file mode 100644 index 0000000..9400ad7 --- /dev/null +++ b/qiktri.h @@ -0,0 +1,7 @@ +#ifndef QIKTRI_ +#define QIKTRI_ + +// Déclaration des fonctions publiques +void qiktri(int* array, int low, int high); + +#endif diff --git a/rapport_Hugo_raban b/rapport_Hugo_raban new file mode 100644 index 0000000..bdfeb21 --- /dev/null +++ b/rapport_Hugo_raban @@ -0,0 +1,107 @@ +[raban@salle235-04 TD1_DEV51_Qualite_Algo]$ time ./student_rank 1000 1000 0 + +real 0m2.975s +user 0m2.963s +sys 0m0.007s + +[raban@salle235-04 TD1_DEV51_Qualite_Algo]$ gprof ./student_rank + +Flat Profile : temps et nombre d'exécution par fonction + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 79.14 2.32 2.32 1001000 0.00 0.00 bubblesort + 18.46 2.86 0.54 1000000 0.00 0.00 find_rank_student + 2.05 2.92 0.06 1 0.06 2.92 sort_students + 0.34 2.93 0.01 1 0.01 0.01 generate_ranks + 0.17 2.93 0.01 1000 0.00 0.00 generate_array + 0.00 2.93 0.00 2 0.00 0.00 free_array + 0.00 2.93 0.00 1 0.00 0.01 generate_grades + +légende : + +% time : pourcentage de temps passé sur une fonction. + +Cumulative seconds : somme des secondes compté par celle de la fonction et ceux listés au dela de la seconde + +Self seconds : le nombre de seconde compté par cette fonction seul + +Calls : nombre de fois où la fonction est appelé + +Self ms/call : le nombre moyen de millisecondes passé dans la fonction par appel (si la fonction est profilé +), sinon la colonne reste vide + +Total ms/call : le nombre moyen de millisecondes passé sur la fonction et ses descendants par appel (si la fonction est profilé +), sinon la colonne reste vide + +Name : nom de la fonction + +Call graph : arbre d'appel fonctions + temps execution par fonction + +index % time self children called name + +[1] 100.0 0.00 2.93 main [1] + 0.06 2.86 1/1 sort_students [2] + 0.01 0.00 1/1 generate_ranks [5] + 0.00 0.01 1/1 generate_grades [7] + 0.00 0.00 2/2 free_array [8] +----------------------------------------------- + 0.06 2.86 1/1 main [1] +[2] 99.5 0.06 2.86 1 sort_students [2] + 0.54 2.32 1000000/1000000 find_rank_student [3] + 0.00 0.00 1000/1001000 bubblesort [4] +----------------------------------------------- + 0.54 2.32 1000000/1000000 sort_students [2] +[3] 97.4 0.54 2.32 1000000 find_rank_student [3] + 2.32 0.00 1000000/1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1001000 sort_students [2] + 2.32 0.00 1000000/1001000 find_rank_student [3] +[4] 79.0 2.32 0.00 1001000 bubblesort [4] +----------------------------------------------- + 0.01 0.00 1/1 main [1] +[5] 0.3 0.01 0.00 1 generate_ranks [5] +----------------------------------------------- + 0.01 0.00 1000/1000 generate_grades [7] +[6] 0.2 0.01 0.00 1000 generate_array [6] +----------------------------------------------- + 0.00 0.01 1/1 main [1] +[7] 0.2 0.00 0.01 1 generate_grades [7] + 0.01 0.00 1000/1000 generate_array [6] +----------------------------------------------- + 0.00 0.00 2/2 main [1] +[8] 0.0 0.00 0.00 2 free_array [8] +----------------------------------------------- + +légende : + +Index : nombre unique donné à chaque éléments de la table + +% time : pourcentage du "total" de temps qui ont été passé sur cette fonction et ses enfants + +Self : nombre total de temps passé par la fonction + +Children : nombre total de temps passé par la fonction par ses enfants + +Called : nombre de fois que la fonction à été appellé. Si la fonction s'appelle elle-même, le nombre n'inclue pas les appelles récursifs + +Name : nom de la fonction + + +fonction la plus lente : bubblesort + +N?ombre d'appel important de bubblesortr dans la fonction : 1000000 + + +Optimisation possible : +- modifier find_rank_student et sort_student afin qu'il y est un seul tri + une gestion des égalité un peu mieux +- dans bubblesort, mettre while(swapped>0) + +temps : 3,145s, c'est bien mais pas assez + +usage de heapsort au lieu de bubblesort. + +temps : 0.124s super efficace! + +Pour qiktri, il est plus lent alors qu'il est censé etre plus rapide. \ No newline at end of file diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..c93e3b1adab6ae112ecc7dffd9fd1f946ce88016 GIT binary patch literal 28896 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 literal 0 HcmV?d00001 diff --git a/student_rank.c b/student_rank.c index af84003..a5ace6b 100644 --- a/student_rank.c +++ b/student_rank.c @@ -5,6 +5,7 @@ #include #include "heapsort.h" #include "bubblesort.h" +#include "qiktri.h" void generate_grades(int** students_array, int students_number, int grades_number) { @@ -51,38 +52,50 @@ void print_student_array(int** students_array, int students_number, int grades_n printf("----------------------\n"); } -int find_rank_student(int student_grade, int* grades_array, int students_number) +int find_rank_student(int student_grade, int* sorted_grades, int students_number) { - int position = -1; - int i = 0; - bubblesort(grades_array,students_number); - for(i = students_number-1; i >= 0; i--) + int i; + int rank = 1; + + for(i = students_number - 1; i >= 0; i--) { - if(grades_array[i] == student_grade) - { - position = students_number-i; - break; - } + if(sorted_grades[i] == student_grade) + { + return rank; + } + + if(i > 0 && sorted_grades[i] != sorted_grades[i-1]) + { + rank++; + } } - return position; + return -1; } void sort_students(int** students_rank, int** students_array, int students_number, int grades_number) { - int i = 0, j = 0; + int i, j; 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++) - { - students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number); - } - free(grades); + int *grades = (int*) malloc(students_number * sizeof(int)); + if(grades == NULL) { + fprintf(stderr, "Erreur : malloc a échoué\n"); + exit(1); + } + + for(j = 0; j < students_number; j++) + { + grades[j] = students_array[j][i]; + } + + qiktri(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); + } + + free(grades); } } @@ -121,5 +134,4 @@ int main(int argc, char** argv) free(student_grades); free(student_ranks); return 0; -} - +} \ No newline at end of file