From 154d0b7edb5796f7641787d30467fde4cc589fd0 Mon Sep 17 00:00:00 2001 From: SimonSayeBabu Date: Tue, 3 Sep 2024 12:19:05 +0200 Subject: [PATCH] TD1 --- contrerendu.txt | 715 +++++++++++++++++++++++++++++++++++++++++++++++ gmon.out | Bin 0 -> 7640 bytes out2.txt | Bin 0 -> 5824 bytes out3.txt | Bin 0 -> 6656 bytes student_rank.c | 28 +- student_rank.exe | Bin 0 -> 65511 bytes 6 files changed, 731 insertions(+), 12 deletions(-) create mode 100644 contrerendu.txt create mode 100644 gmon.out create mode 100644 out2.txt create mode 100644 out3.txt create mode 100644 student_rank.exe diff --git a/contrerendu.txt b/contrerendu.txt new file mode 100644 index 0000000..d2d8c36 --- /dev/null +++ b/contrerendu.txt @@ -0,0 +1,715 @@ +commande pour lire le gmon.out + gprof .\student_rank.exe + +-b + +pour retirer les info/legendes (que les graph) + + +yavait 2 bubblesort dont 1 inutile + +le prof a gaffé sur sont push et a deja mis le bubblesort opti + +================================================================================= +``` +Flat profile: #graph de temp par fonction + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 79.74 23.38 23.38 10010000 0.00 0.00 bubblesort + 19.46 29.09 5.71 10000000 0.00 0.00 find_rank_student + 0.67 29.28 0.20 1 0.20 29.28 sort_students + 0.10 29.31 0.03 1000 0.00 0.00 generate_array + 0.03 29.32 0.01 1 0.01 0.01 generate_ranks + 0.00 29.32 0.00 2 0.00 0.00 free_array + 0.00 29.32 0.00 1 0.00 0.03 generate_grades + + Call graph + #arbre d'appel et temp dexecution total en haut + +granularity: each sample hit covers 4 byte(s) for 0.03% of 29.32 seconds + +index % time self children called name + +[1] 100.0 0.00 29.32 main [1] + 0.20 29.09 1/1 sort_students [2] + 0.00 0.03 1/1 generate_grades [6] + 0.01 0.00 1/1 generate_ranks [7] + 0.00 0.00 2/2 free_array [9] +----------------------------------------------- + 0.20 29.09 1/1 main [1] +[2] 99.9 0.20 29.09 1 sort_students [2] + 5.71 23.36 10000000/10000000 find_rank_student [3] + 0.02 0.00 10000/10010000 bubblesort [4] +----------------------------------------------- + 5.71 23.36 10000000/10000000 sort_students [2] +[3] 99.1 5.71 23.36 10000000 find_rank_student [3] + 23.36 0.00 10000000/10010000 bubblesort [4] +----------------------------------------------- + 0.02 0.00 10000/10010000 sort_students [2] + 23.36 0.00 10000000/10010000 find_rank_student [3] +[4] 79.7 23.38 0.00 10010000 bubblesort [4] +----------------------------------------------- + 0.03 0.00 1000/1000 generate_grades [6] +[5] 0.1 0.03 0.00 1000 generate_array [5] +----------------------------------------------- + 0.00 0.03 1/1 main [1] +[6] 0.1 0.00 0.03 1 generate_grades [6] + 0.03 0.00 1000/1000 generate_array [5] +----------------------------------------------- + 0.01 0.00 1/1 main [1] +[7] 0.0 0.01 0.00 1 generate_ranks [7] +----------------------------------------------- + 0.00 0.00 2/2 main [1] +[9] 0.0 0.00 0.00 2 free_array [9] +----------------------------------------------- + +Index by function name + + [4] bubblesort [5] generate_array [2] sort_students + [3] find_rank_student [6] generate_grades + [9] free_array [7] generate_ranks + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +============================== +output moche: +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 75.00 0.03 0.03 101000 0.00 0.00 bubblesort + 25.00 0.04 0.01 100000 0.00 0.00 find_rank_student + 0.00 0.04 0.00 100 0.00 0.00 generate_array + 0.00 0.04 0.00 2 0.00 0.00 free_array + 0.00 0.04 0.00 1 0.00 0.00 generate_grades + 0.00 0.04 0.00 1 0.00 0.00 generate_ranks + 0.00 0.04 0.00 1 0.00 40.00 sort_students + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + +=================================== + +arbre d'appel ci dessous + +a droite qui appel qui/quoi + + + +=================================== + +granularity: each sample hit covers 4 byte(s) for 25.00% of 0.04 seconds + +index % time self children called name + 0.00 0.04 1/1 main [2] +[1] 100.0 0.00 0.04 1 sort_students [1] + 0.01 0.03 100000/100000 find_rank_student [3] + 0.00 0.00 1000/101000 bubblesort [4] +----------------------------------------------- + +[2] 100.0 0.00 0.04 main [2] + 0.00 0.04 1/1 sort_students [1] + 0.00 0.00 2/2 free_array [7] + 0.00 0.00 1/1 generate_grades [8] + 0.00 0.00 1/1 generate_ranks [9] +----------------------------------------------- + 0.01 0.03 100000/100000 sort_students [1] +[3] 99.3 0.01 0.03 100000 find_rank_student [3] + 0.03 0.00 100000/101000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/101000 sort_students [1] + 0.03 0.00 100000/101000 find_rank_student [3] +[4] 75.0 0.03 0.00 101000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 100/100 generate_grades [8] +[6] 0.0 0.00 0.00 100 generate_array [6] +----------------------------------------------- + 0.00 0.00 2/2 main [2] +[7] 0.0 0.00 0.00 2 free_array [7] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[8] 0.0 0.00 0.00 1 generate_grades [8] + 0.00 0.00 100/100 generate_array [6] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[9] 0.0 0.00 0.00 1 generate_ranks [9] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [4] bubblesort [6] generate_array [1] sort_students + [3] find_rank_student [8] generate_grades + [7] free_array [9] generate_ranks +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 74.25 1.73 1.73 1001000 0.00 0.00 bubblesort + 24.46 2.30 0.57 1000000 0.00 0.00 find_rank_student + 0.86 2.32 0.02 1 0.02 2.32 sort_students + 0.43 2.33 0.01 1000 0.00 0.00 generate_array + 0.00 2.33 0.00 2 0.00 0.00 free_array + 0.00 2.33 0.00 1 0.00 0.01 generate_grades + 0.00 2.33 0.00 1 0.00 0.00 generate_ranks + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 4 byte(s) for 0.43% of 2.33 seconds + +index % time self children called name + +[1] 100.0 0.00 2.33 main [1] + 0.02 2.30 1/1 sort_students [2] + 0.00 0.01 1/1 generate_grades [6] + 0.00 0.00 2/2 free_array [8] + 0.00 0.00 1/1 generate_ranks [9] +----------------------------------------------- + 0.02 2.30 1/1 main [1] +[2] 99.6 0.02 2.30 1 sort_students [2] + 0.57 1.73 1000000/1000000 find_rank_student [3] + 0.00 0.00 1000/1001000 bubblesort [4] +----------------------------------------------- + 0.57 1.73 1000000/1000000 sort_students [2] +[3] 98.6 0.57 1.73 1000000 find_rank_student [3] + 1.73 0.00 1000000/1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1001000 sort_students [2] + 1.73 0.00 1000000/1001000 find_rank_student [3] +[4] 74.2 1.73 0.00 1001000 bubblesort [4] +----------------------------------------------- + 0.01 0.00 1000/1000 generate_grades [6] +[5] 0.4 0.01 0.00 1000 generate_array [5] +----------------------------------------------- + 0.00 0.01 1/1 main [1] +[6] 0.4 0.00 0.01 1 generate_grades [6] + 0.01 0.00 1000/1000 generate_array [5] +----------------------------------------------- + 0.00 0.00 2/2 main [1] +[8] 0.0 0.00 0.00 2 free_array [8] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[9] 0.0 0.00 0.00 1 generate_ranks [9] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [4] bubblesort [5] generate_array [2] sort_students + [3] find_rank_student [6] generate_grades + [8] free_array [9] generate_ranks +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 74.69 1.83 1.83 1001000 0.00 0.00 bubblesort + 24.49 2.43 0.60 1000000 0.00 0.00 find_rank_student + 0.82 2.45 0.02 1 0.02 2.45 sort_students + 0.00 2.45 0.00 1000 0.00 0.00 generate_array + 0.00 2.45 0.00 2 0.00 0.00 free_array + 0.00 2.45 0.00 1 0.00 0.00 generate_grades + 0.00 2.45 0.00 1 0.00 0.00 generate_ranks + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 4 byte(s) for 0.41% of 2.45 seconds + +index % time self children called name + 0.02 2.43 1/1 main [2] +[1] 100.0 0.02 2.43 1 sort_students [1] + 0.60 1.83 1000000/1000000 find_rank_student [3] + 0.00 0.00 1000/1001000 bubblesort [4] +----------------------------------------------- + +[2] 100.0 0.00 2.45 main [2] + 0.02 2.43 1/1 sort_students [1] + 0.00 0.00 2/2 free_array [7] + 0.00 0.00 1/1 generate_grades [8] + 0.00 0.00 1/1 generate_ranks [9] +----------------------------------------------- + 0.60 1.83 1000000/1000000 sort_students [1] +[3] 99.1 0.60 1.83 1000000 find_rank_student [3] + 1.83 0.00 1000000/1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1001000 sort_students [1] + 1.83 0.00 1000000/1001000 find_rank_student [3] +[4] 74.7 1.83 0.00 1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1000 generate_grades [8] +[6] 0.0 0.00 0.00 1000 generate_array [6] +----------------------------------------------- + 0.00 0.00 2/2 main [2] +[7] 0.0 0.00 0.00 2 free_array [7] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[8] 0.0 0.00 0.00 1 generate_grades [8] + 0.00 0.00 1000/1000 generate_array [6] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[9] 0.0 0.00 0.00 1 generate_ranks [9] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [4] bubblesort [6] generate_array [1] sort_students + [3] find_rank_student [8] generate_grades + [7] free_array [9] generate_ranks diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..635866ac8dcd23ea88b21c19f74c99d2d5850933 GIT binary patch literal 7640 zcmeI1Im!Y-5QX0;gJ2}?E0}o&F{%Unf`~^j6kIYhk6<8TU|{GG3_OTnVrbwI{=jN? z80i5~L45<${idp@*Znb_%t%ZyuL>Fkpr3Zp1h9$9;V!EF-OEAXt($i|ZVpT=rK6c$ z9fJ?9$@TQM2f~-M@$|0jlBT#rz|QNKy{$Rx^L(e}lR|cf*Szs|&nIn+ZAgFwNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNZ{)Tc)zaN{#snCugVXJU!`B(wjMuk=1Ji52rT1* zdQPwn0=uMOmK8)wfTRR@eIAS_Xru)#tuv>mqk4VPBh_84G4ZYHX5y&-Z}d?6O*4Yf TqJq^)*Lr^_tEY)~+7s*n^Nb(} literal 0 HcmV?d00001 diff --git a/out2.txt b/out2.txt new file mode 100644 index 0000000000000000000000000000000000000000..8811a56d530fe02c3948064e249be6d77df05c41 GIT binary patch literal 5824 zcmdT|+iuf95S>>L{DWVR;Gt=oOG_%m3j&F6s1Qn9_af4?icNT&p38(dnGdmNVqzV!bMjB`09v z1Q+AjP$?S)m}ti^s_o)@DF)MQY!vWjtdZ}Vl8fMlGI(c!w)@HXpl8N%knu69S$8b1 znLg2oF;s>(?xW~bl4F?w7vtu4?VHpZ)7*x|BEa?cBOCIWV#zu5mVu9l#*ka@IGeGX z^KlW_;L1_&yb8R$5MG~_xuFp4b&FhSxs!L5&X&1uj&->JuSZ~{#K^YHdKvm?hGkxy zLu(OM;|WGGTHZqP4zlyGrs#2v6lPcEaP_$QhPl$SoFUWfP|7d#<)~(6Y-V9%-ifoB`-ZDA&s{_?ULx3$ z$Gp0Fe!B>4i+hbcXJQP7dJ#)q-*3MMYl^Hi|Z{ zVjL4~cN8%qV@2<6RSXdfpH#GM&wIBRQ0AQ>tF%o*e!F3@5q{sy^N+d4cOD?WcZsd8 zoHN#(C#{~xwM1ijeT>I5X#07@_I7({dnV=18S}yONLNN}T)KZ!-gU=*D$(mUG&7^; zM$e39x7~AFSJec^sJ@zfbLa9sUv;m?Vw(M)WAO6~vo!T`$9^h&ueMojx~~Rnk7U+e z&PNeyf>cZT>`a^1cm{3f%&zioKDH_8>fKEu?Rk0G`B!G{t8Ux9%-S|)RXH_Dx^~lN z(`x!4H8IR|Fo|Ad{W|hyco~Pl&%x{Oy6R%g{T8VK~{N%v+X|@;HxU yt8E<5e>}Ob`_5){Ds5T!m9VKtPg8BXNxTMQ4m3X6z1f^Qe$o?Un;t)BQp-Q+k!l41 literal 0 HcmV?d00001 diff --git a/out3.txt b/out3.txt new file mode 100644 index 0000000000000000000000000000000000000000..f4f4f8b11237620cc565b5d7904d9ca946bb0a71 GIT binary patch literal 6656 zcmdT}+iuf95ZzZ0{DWVRK&WXhO?naH1%bpjR0xIEX)Dq+N>T(r51g};$&A-_;*eAd zid?V9vomMU%+Bt*e|~=o<1h@1kcDZOg@-T-caY@aBD@UGQaopzj<{!}zxyTA>{}Q8$kolW>hUt!OEO{1q<#uF&@$mw3MmKcY>(nWHrZ4$-Ur zTh>_s%>pRKHT^i63>tUvO7!Z9qY#YsGNPsBaU5d?3-fTilCfV|GKpNNr))X?emDUa zop8EDAU?@jFPuA>Njl)u|D*^13fJwV7j^lTapbtZBC12QzN0nA_#Yw5W7LF^F0iz4 zojE&VyI(@oUD`GbS&TKG`L2j)0GnPi2h%ekNO8xX)54%26PtZ#bwWRS zRer3W_bXB_nS+}VkO%`Ath8_qD*Sp@#Dbx-$ZYn@8IfTQ<%q=;aS$fde_c+TuGnR7 z@!u<;q+D#X)hqB_mfXb1=P@G|Xj^Vr3_9SVn2X~16cMIH`3V;DOcW9Y)lj@%$M-5@ z83Gq`_17vcqVF@j9!pV+D9U)fj<-F6-#qfMZw%$p8wN7QYAKR3A2*Q=&Q^)ei^$8f zz~2Y(#Cntk(V8N+m`!?#bh50kGvxaMyk0<`8CX@#Z=;S>b=Kk;yk>FUeM3)X%WFv9 zKsJim%ZN*+u%dI_@UdZiw#urgq$1_vCv@4XSdEL7pBT9kUB}o=pe;YG#5vxmEJHox z%9O7%$KE_e>m8VwV$59oSX*OsRbn~Y35#J9R=S9euV%_2?^U%+@}s@Pa1@^M*EIIKIsrwerJ#D9}=;nPKqutvo--;ZyvGgW0tY4J2zBkGS3R0mnvpAd-WEiU1qi}y5+t_NjlPfWZM4~W#eC% zS$86d{#cW(ehtR`Ljp> literal 0 HcmV?d00001 diff --git a/student_rank.c b/student_rank.c index af84003..ba3bfbe 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) @@ -66,23 +66,27 @@ int find_rank_student(int student_grade, int* grades_array, int students_number) } return position; } - +/* !!!!! +students_number arg 1 +grades_number arg 2 + */ 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++) { 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]; + } + //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); - } - free(grades); + } + free(grades); } } @@ -108,7 +112,7 @@ int main(int argc, char** argv) generate_grades(student_grades,students_length,grades_length); generate_ranks(student_ranks,students_length,grades_length); - sort_students(student_ranks,student_grades,students_length,grades_length); + sort_students(student_ranks,student_grades,students_length,grades_length); /*!!!!!!*/ if(debug_mode) { diff --git a/student_rank.exe b/student_rank.exe new file mode 100644 index 0000000000000000000000000000000000000000..524ab5725ce01674911b0dd610b53429efd76ad9 GIT binary patch literal 65511 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 f?ZxL~?OfQ_5{k?&Y12|0?hgLr#jy literal 0 HcmV?d00001