From 69fb2df0664b1f8cede275053af219ce582f8132 Mon Sep 17 00:00:00 2001 From: bridja Date: Wed, 10 Sep 2025 17:24:50 +0200 Subject: [PATCH] Add: Import folder --- Compte_rendu.md | 121 ++++++++++++++++++++++++++++++++++++++++++++++++ bubblesort.c | 32 ++++++++++++- gmon.out | Bin 0 -> 3820 bytes student_rank | Bin 0 -> 21904 bytes student_rank.c | 6 ++- 5 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 Compte_rendu.md create mode 100644 gmon.out create mode 100755 student_rank diff --git a/Compte_rendu.md b/Compte_rendu.md new file mode 100644 index 0000000..9d59c2d --- /dev/null +++ b/Compte_rendu.md @@ -0,0 +1,121 @@ +Analyse GProf + + +**Flat profile :** Donne le temps et le nombre d'execution par fonction +comme bubblesort prend 80% du temps avec 1001000 calls + + cumulative self +time seconds seconds calls s/call s/call name + 77.59 2.13 2.13 1001000 0.00 0.00 bubblesort + 22.22 2.74 0.61 1000000 0.00 0.00 find_rank_student + 0.36 2.75 0.01 1 0.01 2.75 sort_students + 0.00 2.75 0.00 1000 0.00 0.00 generate_array + 0.00 2.75 0.00 2 0.00 0.00 free_array + 0.00 2.75 0.00 1 0.00 0.00 generate_grades + 0.00 2.75 0.00 1 0.00 0.00 generate_ranks + + +Fonction bubblesort est appelé 1001000 +Fonction find_rank_student est appelée 1000000 + +*Devra donc optimiser pour réduire le temps ? + +**Call graph:** Voir arbre appel de fonctiopns + Temps et nombre execution par fonction + +Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 0.36% of 2.75 seconds + +index % time self children called name + 0.01 2.74 1/1 main [2] +[1] 100.0 0.01 2.74 1 sort_students [1] + 0.61 2.13 1000000/1000000 find_rank_student [3] + 0.00 0.00 1000/1001000 bubblesort [4] +----------------------------------------------- + +[2] 100.0 0.00 2.75 main [2] + 0.01 2.74 1/1 sort_students [1] + 0.00 0.00 2/2 free_array [6] + 0.00 0.00 1/1 generate_grades [7] + 0.00 0.00 1/1 generate_ranks [8] +----------------------------------------------- + 0.61 2.13 1000000/1000000 sort_students [1] +[3] 99.6 0.61 2.13 1000000 find_rank_student [3] + 2.13 0.00 1000000/1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1001000 sort_students [1] + 2.13 0.00 1000000/1001000 find_rank_student [3] +[4] 77.5 2.13 0.00 1001000 bubblesort [4] +----------------------------------------------- + 0.00 0.00 1000/1000 generate_grades [7] +[5] 0.0 0.00 0.00 1000 generate_array [5] +----------------------------------------------- + 0.00 0.00 2/2 main [2] +[6] 0.0 0.00 0.00 2 free_array [6] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[7] 0.0 0.00 0.00 1 generate_grades [7] + 0.00 0.00 1000/1000 generate_array [5] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[8] 0.0 0.00 0.00 1 generate_ranks [8] +----------------------------------------------- + +L'index correspond à chaque fonction appelée exemple: [1] sort_students +Dans index [1] main appele sort_students[1] et find_rank_student[3], bubblesort[4] est appelées dans sort_students[1] +Quand main est appelé 1 fois il appele 1 fois sort_students d'ou le 1/1 dans called +Quand find_rank_student est appelé 10 fois il appele 1 fois sort_students d'ou le 1/1 dans called + + +**Analyse et modification** + +Fonction plus lente : bubblesort +Nombre appel important de buublesort dans find_rank.student + + + +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) + { + position = students_number-i; + break; + } + } + return position; +} + +Mettre en commentaire bubblesort /* */ + + + + + +void bubblesort(int* array, int length) +{ + int swapped, i, tmp; + do + { + swapped = 0; + for(i=1;i array[i]) + { + tmp = array[i-1]; + array[i-1] = array[i]; + array[i] = tmp; + swapped++; + } + } + } while(swapped > 0); +} + +Tri a bulle \ No newline at end of file diff --git a/bubblesort.c b/bubblesort.c index a848827..6d8264e 100644 --- a/bubblesort.c +++ b/bubblesort.c @@ -17,5 +17,35 @@ void bubblesort(int* array, int length) swapped++; } } - } while(swapped==1); + } while(swapped > 0); } + + +/* Trie rapide */ +void permuter(int *a, int *b) { + int tmp; + tmp = *a; + *a = *b; + *b = tmp; +} +void triRapid(int* array, int first, int last) { + int pivot, i, j; + if(first < last) { + pivot = first; + i = first; + j = last; + while (i < j) { + while(array[i] <= array[pivot] && i < last) + i++; + while(array[j] > array[pivot]) + j--; + if(i < j) { + permuter(&array[i], &array[j]); + } + } + permuter(&array[pivot], &array[j]); + triRapid(tab, first, j - 1); + triRapid(tab, j + 1, last); + } +} + diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..4098aac46bce85ac275be68e04013b788ac9f476 GIT binary patch literal 3820 zcmYe#&Cg?GzyVsMArep67#LC*7#NCElk@XZiXnmw3~&ZaV3ZyWfzc2c4S~@R7!85Z z5Eu;s(nEj=O$*MZ37Wc*%!P#!DC`&+Ks*ix9xy$Sp#pIY$OSAQ0*pa!lV{*$0Lk$) zm^1V-h%@joa5CsHa51njuz}T(OEAHGtk1xVVF){1goOdbW@KPusDp~3s)q0kv6ul> zK1wk#Ft9MNLc;+IRqc1iUBQlA$CAyKq^5lg18zX1`;O@gG__z1F=CE#AgDhdypB- z3?c;G2~tNd%-A3VvFfEHgceX|U|@6*g>ZC{1s6aC9Yi3K3=hAuG9D0vaMYp3fPBk% z0V=o=S?~c=a2ZrPSfzqEM0<=dga!*5U=tL8I^`!+QccE%i7^39aDw=6CdLD3f**E% GWd#6~a~{_K literal 0 HcmV?d00001 diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..bae60860d2f9e7a905e57d1664550e6d4d732bbe GIT binary patch literal 21904 zcmb<-^>JfjWMqH=W(GS35buHjM8p9?F$DNP84L^z4h$9y{0t5ZsthU&YzzzxEMPH+ zJWM@|_F#sH!)Oi&mjNUU()R|$U|?WCr)8k(U^K{0AR!P9(g$K=!w;Yqz-R`jKS26e zK^mZZm^h4Xj z@iLj}=VT_Cnds-F=;mbRl~(9hSeWUWndlYg>luObJjgB(Cg@ot1)wkzLgK@iN(>AP z*u<@Ih|gnSfM+e386XR^;1JixA-)So zI0Q2=Fo41o6eh^n4~IDn1*Ij$3~5EFsSNS)x%qj;C5c5Pr3DP}xyd=HiFu_3AO*=8 ziA4-0nYpP9i6!}&47rIpIr+&9@$osCNy+hG9r3w|nRyJwMTvPS4Ds>F6^Zd_nR$sh znN_I_xykvZc_j=5MVWaeX;8_;lGKXK5(bcdP_i;(aQE?aa*j9BGd6)Ujr2?z;ypur z<5N;7?>EC7?>Ft!8C}Cj3J^RvX+4XR-7_y znK+FNlq=eyVx>}1K?4z1F2nM@05mb2fR?*3@dJVo4H3|S2__EXZ?K2RgYpBk zC0|UbeBymn8@e4@eyh!3Vki_|s#2+Au!^$SGG}Qed zJ3)C1EXKgVz=0$VEt-^@Mt|y!u0=wNAnSm!(e6qO;71FF#K0NqtC#=FYmzcUlqj90Li_4@c;k+ z|Eh=d85lA^O^KHm!2DexKBx)t@&K5>3B(6AiC%61^H+iRpr+8v1z`Rn5FgaEcsT*g zp9SKBniMY^!2C%dKB&3!vH;BQ0`Wmji9+GfdS<6!xKV1dTn34 z`~Tmg*EETXf#Eo-wLSy5bL7$a^uOpdJq8AkZrgS}28P&|id+l~6F~Y8BaEBi(Q7NH z&%of(%gP0!EPs@UdUUh;f%LT=DB=A7fM31=Wbt7r?a^!d5G2`adJ9Bp{`2Vk;BoMs zy~n{H%pQ!#JTCq#5%K6|)dfkm9w_1X{~(QD-i3hyrXOT~gY8^B1_p*w<4})gTP_gO zqw{GAuSd6SnI6c?KXe%wUL^nj|Nj_ki5>$3V=R(`4}&5#4dDThc`wud|NkHA(fKsk zqxp@-i^_lh|9f=S-smj7(iwW;xa%8``=Qk9pl;U-9y2@+K49t&edCdQ$)lI&DoEa= zJM@M}uZ*Ba=kXUBU;~)DUEg@j@aPpe3Xylc;lX&pqnn{S^g`z~kTPF(28L$WH;mn` zZ>(Lf)GV7Y!J|9&$H~J8m%RUr>XH{Alb|j+?h59;&P8(23mgub4mO7ws`Is8x9bb+ zE(81M;3Fmv#tX+8K&cJxz6&*{nq6NocDud+xwRYFtsc#96kfQ1t*Cv`S^DI->mP_a z!PINzZr493w!MIa11JdQ{rUgD+4T=&x9cBk*C#bsCrp5NA8h2uKVaX3jO+}305#R4 zm(`JnfdQns@z4MNP|??pAWM2hZFv|NI*)mDUf%(7!HfJq|Nny|kYfRAdw1vqNGy0V zgJJ>hgzX-^tPi*$7AXAr{~y^w34i|o@2q{}(OLSSGxWuA*B_t|g1VsF^+odw#!lBi zueD${wu0Q?(e3)cgYiN)gQe@6Qtoco7uv3WI$eLf=4#IU!`NK=hoSO9w<}VlTfF%7 z8|>{H9-XBZIz!KN`kpxM`T%6qan~mh3e0;63f*qkGmyjx3XhFojjk`C>Of)g1SQ}v zKmxuy^Z_WHK%%)j^a+U5%QF>Zwnum93lGLq-3*;f&8|-vyIr4HyPm1p-W__zquccb zB*1PlGcdrcNbYte!U_hsC5WuTc*>(&sN45}NAgLJgAbWJdS$r4w)npA=seeX{6+h} z|NlFgksL7<Xn26~Qa6J~uP7@QC=a1M_XQ}JyGuWKbi4ilsa*N@|NrLNHw+~jaP?3# zW`gns%v`7$tza>TMd0E|5ialp67d3{{MhaK0c7^mAOHWu?78{l|9^0PL(03RVAmrT z2i>f1H5eFr0~k9+pJ;$84AD;*eaahHQ!+X;3}XXt}&*C(Cez-Bzqe1Ngj^-H(wljZ}Aj0ZYhf53C|7i-rCwPxL} zU%)vCmX*QI5CDb243AzOB+(Py43>xL*t%W6fQ|kE)%}A+-9Ny(KUljyDJh1ehF%dQ zTP}1nbh`e5T8}D$D;r}`e5l*?PbX7%=m${t17&M)x;hWaMo2MO{2i1i!C?l^IG`ej z0Tg_P4!)9Sym0Xcs3eo<4t>(?`va6cA*r$T-~a#3xjz`2Ykx3QJ^}?Us9^l@It-L9 zK}9hZA7KR4A&_~XatKU^{^=Cx4h7q>50r;NNl*^Sn))RuHOKaENN$HXnl)Js+~koy z&Kjx)GJ=6&KZtsf{q6t%&f_maz9CYd&x>gw!Gj*j2R$+mq^G5&c^rJ9(0Sb49C9x|1ZGAz!38N|9=A}28NCw|NjRtF)+CN{QtjziGkti&;S1? zFflNk`1SukY@Qx8#|jEB#;PC&#tH#OX&!ct35<~WCeT`ihWG#fgX>clb^#C{G^ab~ z{r~^q>4`u-fi|XSUN*mDJnS40Jpl|1413=H{|_1f0htS`A5s_?7&_iT{K~*5;KnE6 z#m`;N(ZFCYWvykb0-gp0MMe(;14HD8|Npx{8XZAqJM*%+HZwCdfQ<*wr-H(3|A+to z*PyFe1W^NW;}r%52KSHu|AXcj8DQox`GFOH}!XSAlesqtCm6_oOcwQgW z76*j~ND36kOWyqd57GxpQ=kDekobZ(|Nk#wU|^790L@Y|FbD`RFvPrtrXT298<4t= zw~#agngas`8Axo(cZl7fJOdMBVCE2H75JdTBJjbAnS%j}1lX7*7??S@nFYWENHZB2 zG>8XsKgcf7ngfs#ATbaIu}AS}2#kinXb6mkz-S1JhQMeDjD`U9Ljbm34YocF)D{ET z0$KwHqTy?&Kn*np1_s#Lu@Y&JECYiigkpfLgM$h)fF@W$QlNGyh=#3)1GS?;e3<;# zfB*Brd}yN&){nUXWq>AfLGl_sLrQ4wNG$_3c zN^gVG$DlOKeAv23P&m0eJ6kDexch}_Dj1sT8R;1+7#SFu8dw+_Gw49OISkMQCkb7C z=?YCgFymk}ME!4OnEE(qe9PkqZ;1MGHkkTaXnF>B;b4X$(chUtORyQise}vESCeIS z7lW7$T3w0Fc}yJaPeHz5VSmNIz`)JH#K@5a;xn;>)|fIevgLqztR;*L3_L8XnRz7) zOdPD{j0_BHMIaeQwqj7e1hLsFK>{4CMvM#$OdRZ>c}+e6Mg|7vOrCfK28QLJ_1$$K z*K&w5GBB`!`mxMl0wl}81|m6FKn7m}sYJ+ddV`ebF@jBb2a*Gs!p|U}3o?8?6EA23 z2(u&DiVW`~^&WASGZu#vrwVOBom#7^7K1_TGbLTyXy#Bs^ymBLf5D z6-EYzXg-hvring`Js_SmNP=mi18Xz`14AtLc935uCa`X1U|@)Y@-kQ_GBPm4b3*im zu+}j$FeE^E5v-u4yopd=3Vn# zQ=rgb-2oaN;0L*cX<`HegD^;t(F`0q#!$835fZSYHh~-kO6+FR5CdZvzcVl}nCV0G z2Y?-A<_M9CU|q$)z+eG&Mg~hJgC&%m!@wTI$iSer2y7bz19*rAYym4X0|VHfS_%+< zMu3gfGJzNw0`{hsCxjQklF6WhFw%jMfkDw9Y9x462yCPm%t%FXWFr-|A%=voWHKlt z45?sXU=Usm@*)ER19>)z3N;oCXl%Ack|gLUyc11BQu zgO)mhvOaoAV+V>rNY-bBWPL_R#%F|Nd`3vdXJi6rd@e}FXM|*Yj<29Zzd#B!2*e1< z|J>!E!5vVxWQ62@j_;s6$0d{v@)V>j;Q0^A+qO(Rv7iFuABbbm#Cr&oVXZ)kjZct? zfq}(`zn_7D0aU=Tf(Ql{5SJfR01YNoh-U+3cc(khRseY53uNCMKac}m z85tOyq`=IH5lpQho+`*{rimf!nG7xvW)8Cg69a>*0EoxQoB$r@1bGF-X9E>edJ0g} zK`9&LOvX7&VW#VeAe*iy57GoN-2lSOV7|}Dz+lJ;;pH%}X)`e}h`fQ8`rv^+uzOXQ z7#Ns9?iCS$nJ5iXDGkvW0(QL!)b#<(EKCdxVo*a9n8lbF7{sBx6y{fq3=9%b9>jV{ zC@+UW5LCJ{a;SOk9O5v`L4n1g1ht&`CL;p_7c_)&pdrMb$-oVf&tYJg z3yKj2Mvgir1_owC+S|&&zyL~n=(W~UW(Ecp3s3@NVMCW=oHH5ZAW&F{fmlovBN#!h zQJe{?TPB9Ef=0R-+1Mc56sAlDeh4#zsU)|6K?uUhVPN9`vDhK$mVuF#ftk-rk)Bqzzb@6DrJY&1%W5F6k)@5#|zPROJ)qp1{aG zk&%sAURoYxlz=z`12;bdH#Y+V57em~3=F(#V5joI4dO;Nh#%An6oAWtErD1e2p5EE z09gTZtq?aOh|9nrj9pa~*zqE$k{}%*13-}lbsrxC0~1C#Gh>7y3p@;2Apy?@H5nW| zpwNPu4GKzjM64)sLZXgC3=}Qgkho-E;KUVtTu^s$FfedK!i`6d0UT*a5x~H}3$-39 z2njG;A&jaP7J~wyfJX~sm?uC11Pc{K7I^Z5c}tNECd7=(A1rW7!I1|s7!oOv6bcOr zP_hOkP;PMgM0lRT3S2dCFo5<1F)}j#=Hq2xWCXRDKr2HT85!l7K)DpuLtz53k=m}{ zU9;gJFC>5nRz?O+CRmll%*n{g$x+J6Rm#d*!YXUPY8b&P;KeG-5y2|Lz{JAX#Hwb? z%E@8Fs=&a+!u+0<4kVvm2D!cCIb@-lP0SY#2q|&tc=8|2o0AXb2+ttd-&0*Wj%Gq36%F15G%9+6`z;TjQ zVF9an6RX^HR?#L_>FcaQO{{V^SWO~W<-AyBce5Htu*!O|vhL=v<*;LA=ZIqE%;2zP zW#zEv5atlx&C0Wzl`)cuiGh)EF(as9!NK4UN&(nX4+|*ufI0!7g+TCB#13kCFn|eA z^}q;fY%{F`HQqrCY_ZtEfVB!Q1~)7v6_JtazwC#G%|vs&xe&g6C7@gO{^ABNf{_D z29}g=VHM%9VU>wwetbF>cvK%(7oRO@I9CjcZZA)3X%2`>TuyPte5;cbv zt0c%AFIKK>P$tuZV!zz@f&&oNGRTk`ib5?PPO2%AJdbDNbC}(9)W99W> z<)6>W36h$}%2fvPwuk}5sJ&D@Q3Sa|tU?6f55ZRvs@_$qB4%91*Mn zKCD6$K>3@qgjGC}m5alMm1iC+mlvye2`FiE>4QU#Cz4eZoIWePSb0E>^y^HPg4lNEGx z6N{2FY$5x96?D@TbPG@oDrP9nE6z;MOHEM#?-2!SOe{$S+g;26p2m*{P2)2ZXXF=^ zD8N;Ndbi*$qXqfJnI)O|d2n+W6CxWK`8FKRT(iOl2iiu#)6~{x= zfH#~%+2C!f8L5c{#rZ`g2*V)?!JA*fhJgu?(?CK{tzcu)Alp}Ap$V0OhG{X_w@@E~ zbVHqylbV-alEIKzlwO9g5-JFC2h6l$gzq3a86XtQ@6heGiACwj43NFFC8@au@nwlQ zrKt=>nduoN@p<_vp#8g`ExPd~&~3OmiACwD#ZWnr3`0(88kC!sSyWsSpPZPJ!%&== zR>DwRo>)+jn!=D&nv|523UVCG#bCebB{S%!RutqHmFQ>W=cei><{265ClzI;WF_i{ zxERK}xQ3Y;#s`)r=46(n#yjSu=QHS+78mJf<|XHprlc~!LS8R}p|~U^Co>7c$jsNv zK*%Md=+RHgEGfnm(J!eiNG)anlX@B8J<0JUP=;OxlKb_NL0t&k7&P9*!tn7wx(d+n z6gF|tcqb!+6a%bT4jras038>=$RNo8>(Ic&LF+lNnFF#9n>e`1z#zteKK|wg(!e0V z06WJ3%muCI096tU5)82MPMA1okX49*mjS&)4eBw1#L-6>Cg9i?4(j58)T4Kymf=tj z+K&$H!^4~crmy4Jr#^!bw2xnsApqLV0V`%;VEBx~d{Bo4dW0TdCS5d)|OZt$8K zNrn_ObA%W{=L+yLz$!gh4-7P-BgDkV02|ka8pEIhRS#=)!Nv(dT}N#GatGPV1WH9P z6CiXH)Ex9tkyNNSdM7szEDq6&Ot#<JU_+yh#Di_Knc&>9y8DTV^Hcmb`W0=dTl z>K<08`Jgp9AaU4vGT^mQ3=9k!P;=1Z*MtcYzv$zMmSAzHp-7YuSe%yueF!5OY(5`D zBQ#yXv?M~+!>VlX5D5bVLk?IRrV2r~;t-z(7UyL^A8rJl>jDb@47Bh8tseu01NuPS z5hhT6LD&al-DARj-osCjy-eJY#bYqV3=9mQED;!{%+ zOA?_qKBS2NI?W;z;b=(x3{jDWVnlp=YDH>tX$k0r3dqSA;IlQL4F*`CB2L#p(F{I5 z14Sf09^@3LLCEKGps7mF&Ci3VijQZAk54JikIzWVO97vf;U8aIl9HJhUs{}+0M>u6{1@@sO~GNkM}bd|C+B6G2dqBtfwv zJ~J<~gn>b?xH7jSF^NI1xTFX|XTVr_`6a1(>3OAk1x5J>(q|(fs6y3}e z2EEL@lGLIC2C%}6#NrGFy_Cwl;>uhIT~Y**DN8LX2DNs<%AlP1A_l#p)SN_+1}Li_ zrvzkTW(k8HIPmn+GV?MS^osI9$$>#HH6uQ)C^0uRJ|m?F!DG-X28%+S=ji0ATauU# zF$Wq#U~^#Xl*+us+{|PKz4ZJNFrf#w7GgzGaWR8la(-@ZYF-J09;6|kSd^HTo>~m! zX6B{k!`O*QNkyq;FkVh(UMh@T4DvceKS($p#78QR$Yp|xYj)5`CDecp$mAOXj7BR~ zq0@#?#S9D#pxv*?`f;6S1=9g**TMLX;Pw|}?IlPI*STaMIS@u~DR?q4Fns&}KOZ(v z%>lIlM#JXMVf7<;rV(Ti6oY14Ky%_S{jhm+7`*{%A!xc8#DwVw4WNOH08Ofaf()h~ zHV+S@Ve{@FwIB>K14P3xsCf;VR>eJyd%(@IgAgRH;2)n z_A^L7y8A(5AY2b^o51wL=IvoLY~CJbKf3=rq57Rbh9Rv3fUO5W)(;9Zbp4dMntlb2o z7sD1%K(xWnIf8N-=0npj%>A(TFpP$+|A47ScRy&931mM!{Gshd@M3ZX1_sc6ESO#p z4GTXI8-&+F?T6`y^>1J_XiYyz9Soz}zZ*@zfg(gDoQ4?;5yr^>pv~o9kn$h;d2gUm z9;j9@h3@{d43MQFFl%s~YX{a0O=~bVhz6Y_2U?R2%7Y+2Y+cO(T@Vkp3<1IhkudvV z^mFKx4@^I7-OULi^@I9Zpty(WhxI!zK=s4U4Fst{wjY-MK)VA$@ek7vJJ)Ih=)f}2 zBs5495{9`OMuSGhk@ds+u`i(d!Q+{D^mBoxbwPuiP&KfAWB|0_fKH@CWii7Ov|Iw@ z7MS~C{fiW+e)xJQs0rxl4>V&5az9i#R22gQOh0=52dM=qg3+LUD2xpfhv9mtfuMdl zObkS$s|BsDKoH`pz8K2 zN>xDz_c1UqbfN_qy4ql<{ZQ|Mw1V+E(6}}O1A{XT`(ft9;n4pPR53F!Fo0&e!3IJJ zm_B40%?hx}9ncCv16px_#&= 0; i--) { if(grades_array[i] == student_grade) @@ -77,7 +79,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);