Good Job !

This commit is contained in:
2025-09-10 17:22:37 +02:00
parent ca552281c9
commit 828e40575b
4 changed files with 45 additions and 24 deletions

9
Notes.txt Normal file
View File

@@ -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.

View File

@@ -17,5 +17,5 @@ void bubblesort(int* array, int length)
swapped++;
}
}
} while(swapped==1);
} while(swapped > 0);
}

BIN
gmon.out Normal file

Binary file not shown.

View File

@@ -51,39 +51,51 @@ 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* 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)
{
//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);