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 0000000..53023b8 Binary files /dev/null and b/gmon.out differ diff --git a/student_rank.c b/student_rank.c index af84003..d00b314 100644 --- a/student_rank.c +++ b/student_rank.c @@ -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);