From 2cacd7510c4e07cf36e4651e61faf9533597dbe0 Mon Sep 17 00:00:00 2001 From: Nathan Deroche Date: Fri, 24 Nov 2023 12:30:38 +0100 Subject: [PATCH 1/2] init --- README.md | 46 +++++++++++++++++++++++++ __main__.py | 63 +++++++++++++++++++++++++++++++++- img/Courbe_Fusion_sort.png | Bin 0 -> 32898 bytes img/Courbe_Insertion_sort.png | Bin 0 -> 21894 bytes img/Courbe_Python_sort.png | Bin 0 -> 34532 bytes img/Courbe_Selection_sort.png | Bin 0 -> 28457 bytes img/Tableau_Range.png | Bin 0 -> 9099 bytes sort/fusion.py | 36 ++++++++++++++++++- sort/insertion.py | 14 ++++++++ sort/range.py | 11 +++++- sort/recursion.py | 11 +++++- sort/selection.py | 13 +++++++ 12 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 img/Courbe_Fusion_sort.png create mode 100644 img/Courbe_Insertion_sort.png create mode 100644 img/Courbe_Python_sort.png create mode 100644 img/Courbe_Selection_sort.png create mode 100644 img/Tableau_Range.png diff --git a/README.md b/README.md index 74f925a..bea946e 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,12 @@ Mesurez combien de temps prend python à générer un tableau composés de : Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécution en fonction de la taille de l'entrée. + + Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? *Écrivez votre réponse ici* +### La courbe semble être une droite. Cela signifie que le temps d'éxécution est proportionnel à la taille de l'entrée. La complexité semble linéaire et ressemble à la courbe de complexité O(N). + #### Quelques exemples de complexités courante : @@ -77,6 +81,14 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Le fonctionnement de ce tri est le suivant : + +* Vous commencez par regarder toutes les valeurs et vous trouvez la plus petite. +* Une fois que vous avez identifié la plus petite valeur vous la mettez au tout début de la liste ( dans le cas où on trie dans l'ordre croissant comme ici par exemple ). +* Ensuite, vous regardez les valeurs restantes et vous trouvez la nouvelle valeur la plus petite. +* Vous la mettez au début de la liste juste après la précédente valeur triée. +* Vous répétez ce processus jusqu'à ce que toutes les valeurs soient triées. + Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. Mesurez le temps d'éxécution pour un tableau de : @@ -88,8 +100,13 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. + + Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +### La complexité semble être quadratique ( O(N²) ). Cela est logique par rapport au code que nous avons implémenté car nous avons deux boucles imbriquées. + + ### 2. Tri par insertion Observez attentivement l'animation de tri par insertion ci-dessous pour en comprendre le fonctionnement. @@ -98,6 +115,14 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Le fonctionnement de ce tri est le suivant : + +* Vous prenez le premier élément de la liste et vous le considérez comme une liste triée de un élémént. +* Ensuite vous parcourez le reste de la liste et vous insérez chaque élément dans la liste triée de manière à ce que la liste reste triée. +* Pour insérer un élément dans la liste triée, vous parcourez la liste triée de la fin vers le début et vous décalez les éléments jusqu'à ce que vous trouviez la bonne place pour insérer l'élément. +* Vous répétez ce processus jusqu'à ce que tous les éléments soient triés. + + Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. Mesurez le temps d'éxécution pour un tableau de : @@ -109,8 +134,12 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. + + Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +### La complexité semble aussi être quadratique ( O(N²) ). Cela est logique par rapport au code que nous avons implémenté car nous avons également deux boucles imbriquées. + ### 3. Tri par fusion Le tri par fusion est plus complexe : il utilise en effet la récursion, c'est à dire une fonction qui s'appelle elle-même. @@ -156,6 +185,13 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Le fonctionnement du tri par fusion est le suivant : + +* Vous prenez la liste à trier et vous la divisez en deux listes. +* Vous répétez ce processus jusqu'à ce que vous ayez des listes de taille 1. +* Ensuite vous fusionnez les listes deux par deux en les triant. +* Vous répétez ce processus jusqu'à ce que vous ayez une seule liste triée. + Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. Il vous faudra deux fonctions : @@ -174,16 +210,26 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. + + Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +### La complexité semble être linéarithmique ( O(N log(N)) ). Cela est logique par rapport au code que nous avons implémenté car nous avons une boucle qui divise le tableau en deux et une autre boucle qui fusionne les tableaux. + Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Écrivez votre réponse ici* +### Le tri par fusion est plus rapide que les autres tris abordés pour toutes les tailles de tableaux. + ### 4. sort() Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : `sort()`. Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) +Graphique pour la fonction `sort()` de python : + + + ## Pour rendre ce TP Merci de faire une Pull Request vers ce repository. diff --git a/__main__.py b/__main__.py index 98a585e..e865c45 100644 --- a/__main__.py +++ b/__main__.py @@ -1,5 +1,66 @@ +import time +from typing import Callable +from typing import TypedDict + +from sort.fusion import sort as fusion_sort +from sort.insertion import sort as insertion_sort +from sort.range import generate_array_of_number +from sort.selection import sort as selection_sort + +algorithms = ( + insertion_sort, + selection_sort, + fusion_sort, +) + +array_sizes = (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000) +array_sizes_generate_array = (1_000_000, 2_000_000, 3_000_000, 4_000_000, + 5_000_000, 6_000_000, 7_000_000, 8_000_000, + 9_000_000, 10_000_000) + + +class FunctionMetrics(TypedDict): + """Function metrics""" + name: str + sort_metrics: dict[int, float] + + +def get_metrics(sort_function: Callable) -> dict[int, float]: + """Get metrics for sort functions""" + time_metric: dict[int, float] = {} + for array_size in array_sizes: + start_time = time.time() + print(f"Testing for array size: {array_size}") + sort_function(generate_array_of_number(array_size)) + end_time = time.time() + time_metric[array_size] = end_time - start_time + return time_metric + + def main(): - print("Hello world") + + # Used to test the time it takes to sort lists using python sort function + for array_size in array_sizes: + start_time = time.time() + generate_array_of_number(array_size).sort() + end_time = time.time() + print(end_time - start_time) + + # Used to test the time it takes to sort lists using the fusion sort, + # selection sort and insertion sort algorithms + metrics: list[FunctionMetrics] = [] + for algorithm in algorithms: + metrics.append({ + "name": algorithm.__name__, + "sort_metrics": get_metrics(algorithm) + }) + + # Print metrics + for metric in metrics: + print(f"Metrics for {metric['name']}") + for array_size, time_metric in metric["sort_metrics"].items(): + print(f"Array size: {array_size} - Time: {time_metric}") + main() diff --git a/img/Courbe_Fusion_sort.png b/img/Courbe_Fusion_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..2e81b192bcb69f228983a0f6846584420dbf7f09 GIT binary patch literal 32898 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

%L1I)hmpu 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%0DW-JvCk{LE{>e8`?%c zrlv0!LW}FTa}G=iKKa%JUMKf*`>xYv@-k;?d4gPiGitdT>`m>arHn^NEbyf}xn117hNdTo!XO{=?n7eVJg*^XlZG(e zY-B>B53J9SJYVtTM>rx8pyhv2_xS(sx5$Sk(mggqm#-f93mAG5_;VL3Jz2L6U;G~c C__g=| literal 0 HcmV?d00001 diff --git a/img/Courbe_Insertion_sort.png b/img/Courbe_Insertion_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..aef4fa24a989f571d1a06e615270333d071bed39 GIT binary patch literal 21894 zcmcfobzD?m*9Q!bpke_EDhd(;g0zBwGzdy}4<*tJp>z#lfQWQA(%m5-42lxcH3LJb zG(!jsH8Ak(ncsC^_jTRx`|tDoq31K4bJkva?UmoPPN;^OJozQsOArWzTv0(z3j!fo zgFw#wyl@`;#Xy2V30%&&YRNx=l=t6R0YA>#$f(LdAXSlw4Ll;s#>|3TbjF>gTFx_zRVU5b}u!Y?VQ|PnMI9!nZ1}rA8<2! zga6^ zXXME?K&ek3UJuP6R_p77fQj=!E^2!ZI7E6T~}c$uzGUreK3z;|w$?I~3E z-2L!@nUf^@y)c9BSJE4QiyK~({pq$EgNErA$-~we?J>GC;zOKSuXhu6rL8o%J|K;* zUX7M5dH=ydXabWtYnd@U5w&KW;NTJCH&da{B#`R5*xf6vp3$yPbC0kW@uId9MsN)z zyEc9XTq#*9Nx_BT*>f_&-H&Y);No>Fh#p-2J|GbTmtW>*J;0@{{Q{6MBrxRvl^2sL zcz?EL=rQ^qeCkaW=rna%s_x;fsW{VU(;ahfdlzNa^C^VEzCzK&&@kC=Z^8z-OG@!r zdT%x$0MkU*-}%yFr%yPsreCzjRB5`bVa6W6d2F1Dx_X+lSWiku5jX8QJKZ#Mvv;c` zZ*wACrDe%-^7wZMW5OolRFY?)BC_WBSCZS}UX?B9AyE`%dhHCC-dT+&=~8kJ;6 zNGZjcPLF0!*913guda?)NbwCBkFX1i&~Agw_q1t1K4+H|1geB=|wU+ zcHcojaT(KHqrPhOeeNRk0~Ka2Z0Z?P*?eyxf%$dN=bIBX1!;cU-E_tjqRUK2H)H;8 z`kZlz4^CEKeZg1P>%ElDF1Golrqr;e14r^p58;oe^54Kd)LrUNr#>-(JrA;!JUwukW79uMpuCnupU;P+kaRMy^1cN!d~5eLpMp!EaS)u-mEay~~icRA||V z9ltXIU*DS|*wZBW>W>`eRIb(}&%<<>!YBWt4659uEOUo?>}+y`Ho8i6a|dbUJk~Ha zN*(PnD6l_*`rFN(*)cF#E*-oLSoqj-_P$Qt%?6IEW*XxDO(B@m*^GBG~PgtkE z9T>SjqFJh*DT(wAm5N# zoz`)D^p?msUT?yb)0xQP#w{Ydn>Slw>mm7~{+PYf)sl)*kAdLUNT=zhdus}*g(G&= zOSHmHX}bvI0UNpl?G&&woX4>qslzI!w_MFo5aW0m-<&$9t)1dK;3UP>%{sZL>Mj~S zJF_@`?X+5N$oVkq(bOV&axjOpFi?&RgG4!Bs)($vuz4HINKFzczO8^c z^`foCvSvFn2OMv8;;4hppOsK7H)%#*3RI)*#ctNs)oqVzs~e*F@U8egqr>H#$WrQW z%6u)B>2I-Ttxn2WJeFN|H)m)4Yj5o&(UxZTZZwiJXq$yeW(I2)9Bm?In<{2Hrc7r; zBnN<6TC`A*zbx|FY}vQ`{p}qRHV7$2^;xX?4muV^Hls{^C-!Z#CjTBTWj2^LxQeaf zv2Tke4P}wmsgBmOvh$(r8I?{s6?m!BLv=hHdm>No9tSV^-U}OJyHU}Kv&SEymPVqo zCKWSxHkvo<>l<8;mYiqnuc5#0p}BP`fz)w0(hvr*^jm2J-fY)=Opb^7A`z z&B5aM)Yf`4{Hi{(Dc{z1q%Ci=`_Km~g2lrQdGFtk+L&&h+<&P)8_Tg7Y8oq9u^~2{ z-#_r$6f5Ds^@9d!@qHGxCbqOBG2yzhq`eLt7g9)|*A;W3R4avT+zm52_ILQ;G}6f! z@I_N(6oYF-`doo$$W3P7>nzA;^&Q~Bm$Jq>q^7!*nECbYV0;mC5n`oFFP)rQGL~I) zj>i374e>iUZB8vUwd{_UT8$r1$C=?BoE#3%1sX3lwv`J$02=UKSGI_3(;`v=Sse5z zNJrh+C$OThuyB*LK;`pjC+e36Pz$4d%ur5<`|E>+M6*)r@EOlc_+HgXe!~!?5VL#u zr@g^jrA56!EqxwnM}q5s1j?s(7lT4&eyK%vr!Cj+Rekv~RV*?LExgS4WzZ*+mUXu- z8TG2`ZiqpHbA(9u>JgIq6Y_ZkgG7_R?=oxzbuHizGB&5xA5QO+sjV(C=7aD-Jbz%@ zauYs)lT0(8eM<(HEZfEPIs04SO<-SBj$+JBOIjJGP1{2#6GzmgrqPm%czei@E2LpM4xghCQ3Z&GcuB(j8N$z$w!j^JB1xuoj+fr5(e#@Vp2urlb28mY81 z&zyZ{;roUGBNRy?^d1Iy|55(z$dU?y6aV}#%k?AGMeDu0jo^^i^JdH%qGz6&g&`$7 zLcYpj1wMV%+DFW6ex8e{nQ4~HXpIDc>8nrKtly66&jrqC%b@B(QAz{@ASzdMXS}0T`@~pe z7df3{JRP?Uz|f4-nEAbW!(Up_Qe6DADbs&tcpo|S>O5pSdI?<#M>A|Ncm3LEk_x+x>J8v>kGegM4i9dog>V+#_s8z{%lm zWKLv}xr%zOlKQjYjNUj&M2&YKFUI0NoF3}BkdQIot3G7yYg?#?({6C}wdE-sUK%?} z+Ald3o2@x463fUa+}(2w&-S*hn&CGGVX;k$;Lara%7d?}f4igJIJ4KGn?d=Tka zUlM$kN4UmjpdQ&7HoMv6+`D6E@Nz>Ieg)1ASAjb$`Hwm-eaUPskn_i5%urJL+13ubsPm_l3G)^;GL9#PdkmfxZ5^q z=6F>^66~t_yNOwx$l!xj?vi}*d(~B)1v+_iHPsJm9k`}j`V5D`zUh zJgA2<5%D4qJ4Y7J(Y4<$zA|l!Hq}=j53MgKA7RSvrOEUP{rPSNgy6lJav1qb=Fs{# z8>HF{X}{a!WbnS(sFg2f*?itO2CC_bJZ#VJu4tArK8Mi94erH3V?5+~P^Z|s8om5p zRxWLx-PzL<6i#YlNy97^Im%h~)G1;^0N-0Ihfr8{WySgB&mF`SyZPx2%go9i(~!U; zeH3t()xT<~7)L@08?|)LvZMnq-lDxw-?( z8u7?Q50!HmIW^|N`y{kSQWUZuSQWL(#x`=AKrIf zn)aS3?}bIj)_nZotj#jis@}QP9UhJ^b-1$rxE!m08J{g={_QNLC7JK7Q-noRSsX(_ z?Rg1*-<2PS3;BYxG!RR!0SZi^s(6e^3T|cgY=cT@#lkQo%W+!uJrY&SZn%D2#NMhH z%T`w?qN3dkdruij``}UUO1B;igFSSgzf5nJ+X&TIs-SYRtI5r`?Hbj**AdC++`>B| zqSv5YZ6=a3cO}NjKDlAm-xm{5Ba!xr+fcQde}Q`lGiH5dCI9ZTH{njg)7Cyi@WY>6 z6{9Ge^=l_1o_5?*9kVz79Al`VsU?1TEWCs9a&KPa_FAsvjIOpBcWUgiV3M+EgDlKX zPwSK5G1~7(oE3gJcT;u0uJxuw`Db!ulgXck_#G06LVrz=Nq~>@#tZwJ$ruq4G1y++ z&GAQyL$MhbN0nfu*jx;oj*z@qAjkRxo8?f`_PF3X5)-R57l3mR@HqG#Vr0h2ud4nR zw;&^%f1aEC4lbpZFVKm7+O*$sAy~k+x#%}C!uO}&R~LWHSCZC7!!Pqcsmg*)k!v=k z*M`2|Gap>!PtLllN}76mL6)?lm15cxnt?q<=57iOy=wDTM9zQf_R|w)Ghp}GIOyrP zlL_6aiQ#mN$muh6n_Yd??)P;FmEC!RC)Vjn^NiGx#|H%K(HJRYI~ka;0Jq)pFl~Q6 zZ?b45=Ka;~q*(v#6u3n9ilVyMSNrw)j02VM_{qI8)v^3!Ye>F#$az(XAue)v+GXtJ zx2+TsL$Gzj$9L*aG8EON@U^=OG7Ujam#5jl7I!iTTkLyRXnE#qqhzb`qg_+gnse0S z=~BC?(NCxzA_^T;cpQssFUD>Jzs2zzhk4uUd}4&M*S+SYtc9L&f67rn_WrN z+4=Esy4U8Jys(lRP}#I2zT2*8Lyjq>;`ea9Hroer5d%t1NkW(=ggYWNVxtLLd7ieF^wOUII-FK|ds^HPA zp^?~1mLAf9sIwZ{D3LGaiv+G*Sh;eSc9rTJ89fQ#NH5Lh>GPrJY>clR?^{+bn*5qi zw;MYZ->6rkT}C$06Y_1N#zKOZf*UjKdS+63gIxxS*L7y3)Fx)9LDUh+@IeluKnY;aC)~_DB z%Qne|OM_ZeASBt2N=c+8cZ_3iQ7d4V0tB!ru^AV3*}cowdvsJkO6vPv9h7zo=5!6d zPu}C>yKa2L%(tM2&8r!{?o&OozmXd$?7FCeY08kMe%C0+u25DbSeNH`SJT%*LNRrJ z`1pwGl*jCY4tq>D}D z)bX$-Aw}UD^|~qBtgwP3g-9A7V}P_xo|wu8n>igJYYKPc?Md5JcL3ds&4Ox%W^?nV}DnmHFpVKCh$>R)i^ zT}fKxZp*T-VBK-QV~hh;q7Lh1#4{@^f`*`R3U@)E!KsqR(s7(jMHlU_}|>hqIPPVGc9EpCD@AU?NR)?Us+My*8|i>u9e|t zMPymx4K6*02ii{J)0;j+N6Gw!6;JmONbIW6P*_4|!kTbS5x$^L(@jWsTDX6`F!LRa zsn=H@xb^Ih+1WKQ8xiF_B%koR5hCi zFh^0%_rYh#LvfX!=@Njhbs3I)3HoPdK7rVRKt+<(Uim8^2nCWy}Pn9f}%#;lF z7MHMN^A*QaeX5Xg&Z$66$=f9j3a#T9bh4ob$SkRKj4Ng*MUx$yJ*hhzQeP)5n8bGQ zeZ;Y3bLmzt?oToU+GJXb{lpq zJCbckKfJR1V=Z8sqG@1iP-wzOiYGE(d}VLU(T3zUaZ0qDG!Sd%SobT?^5%u}i57>Re?ZMk)v~mhw4|l# zNFyAXzJ?d>T+2MzU$>rQk6pERR3||d&sfucC>blE&$*z!S+K8Px=|stvcMM z)0}{*N&kbah5rj#a~w|{G`1;Kc|iXed${X9Um{0OlWHNlkT_Atw>ik!`>iM*g0c2;PeDvb_!$=h?IWbFzvU~#}6{9k_2&J z^rcZ56253OOt=(2hgCF z?!9F+62A542lA<1EN$5<6co4k`n1}r$FeU)aE}VSP;K(+Rh1x@hPmptmu!a1iE?;`loUKv$elrOaA%V2QJyGNs)k&Uf>hc1|ctAJr9lM8D+ zk9@GUw}l*%TCUSAZh>^J)}Ej}fo^vz3lvBjk;Skjt-PF{wzepDpW6?f2MUH#%~b=$ zmMI-<(6;8}U=Kt4-Tmw>cJg%}BiFm7gj>@W)_4JkD({0`Hs>RNyk(JX8O)BCWDS5m zO6Ol2*UmLJNo@l+Ajxw7iTltq@ItMd<>m2_ zh>K|0NF-62KVwHx!_AH#ZNr2N~6~6e*CWtG$JNSx}Z)xM36b_wwb>^SEA(gnC*9CNS9g1OY`-= zWmXzwKh;g85KTjxdIragY;@ads6%f5hKFUFx5za)r6k{1CGI4~>rXo8?NhJ3Qp!%z z#0+E#I`n?!8_&C11juNv7}5H~w7m|mx2!zXxhm3+0G z?E0j#BT=q_U$Cx)YUMt)S{cx*C3>^=)R|L09vTr-WsahWY_f!HO3xU676n2$i7{9j zZmExS=bd((tj8FqT={3sh24STvi`gt)OXQDhC2D^DL-osq0Pbibmds$cA1=ey-Ji$ zu$z@SKRA&KUu2J6emtC6{`dR86KKA<43t#$=be*`hDA_zC6jpQ24gve zRr21$+rzw5RWFzBt&$%3l>GaFQg!_f(L~+@e&l)UO!`_^I}MKsHs2Qyh|G!D^|J%Q zTqy7eL$iLg%B`Dms*~O||9(47ex@)6A$}tP-88=aF63~bLEgLh-*@9uGcWhxE5PC2 zr1@a%`$9UH;TOI?ulp*&Y@(=J&Ggw3zPVba2TVXd&Hd+Gj{Z`KN|UYgv9;M{hkqfcQWF;=us35aAkJH z4GyuO%pzTRACqkMKa$Mq>owD2Nfg)NxU3J>W%8G1xK5$1f4imY7-P}3 zz!!&ep=UVqU$p$g7{Aj`u4|1g+%Nb-kM{}#jb9r0d;ZVaek>}bYV_ALVDJ?KG;2I0 zlOJ>6@7&O}P^5|4-L@XjcV1PDIxLuc#kY{6>Xx_ZQY&W*MM3bOadin zKLQVVOvgP&->E0~d*~STrcU=kCzlocF|rX``sTyJ>Kv)oubP`fSBTq&_T?rryVzh~ z7{5}H?w5GmpXcrI6}86qp82syC3K!>$~=1nN97M3 zmGQqE6;ZvJB>s^_^wSb>a3>_(2EMeClXzfgU?H`O`_eKtvK>dtdG zo@DnuuNC=7E7`^;oOUNF;$Cgg78QYG=?p`>MfzA3puXZ#f$t z`W@*m+9plAkwmcpp6C;?p|c(Tq^90~J{=e;@AK3H)n1pQzQy;?TA#;D^WwL&ERb6C z<*$09d!Z@hL|P(i2(z)S@gh-}UFpS-$#pvHa!)*nIl_FQA+Ux`hN3uKm_>Wrm55-h znEV5nUA?(8u;Te7;Jy$mrFndU8Fg+`RcAO@@mBO6w*l)EhNU$Ll2>CUA`F$Ct&zi} z#KY~nM%N2PHxr^WO-+KeAaR!zNe%;0sJ0Z$u4?L~Qk0>xD={cDg&Ec)sFlPe@0I4! zuiEffb#)jM^{Y$EnY-GC#{~HRwvu~I#+s+^A@K;fb88Yz#cIrv!?C@kd8t&JF66$~ zfx?89mXyX~Y~IlgKz&rCJNRLC{mg_gVtFyW&aIa;UaR$ikflWh?>U!(erOX}O~N8S zk*}Lx%wJ3ML@h0x!4lqU=0FE1Ypi+Tyxg9m);#omrFq`(rmsLCzcj-TW${&_uoW_} z*?|i`Ie=jGiGpRY?1R#hW5U)9l_^(EEbH`VOT=V_7U@WQNo0esMBf&$9#`&OarBck z!&}XK@!m5dI3TBXLuLGSfi_9?MZn8F65l)I7%M9)koME|hmg~;DJO78H#LbSOTwG3 z+h$rglkHFwc$=S5Azi4G9a_|?2NA-iGL+n|ZsGAizPX{5|Z*q6h)dA+{o zwKz})PH-ODOC7-u*oQClIPfyrH%`$)Ma&^7d}Tg4U)f9p-KEIy!YS zH(EjN+waPjv$~p^cL_Dg{}uyXxIe~FsC~tmn4B+dJQ95Iad8Tu=b|f$F=JJpDH2c@|u!!?ET6}Myb{b=$=(iLU)QFYz+)xL^&_Q z>x#tj-ZZ|7xwAr2-9>OjGznuBx6zI3*A)_ZK}C=pqx5`ptR!)4Yt%cHPz*Va+YDql zR>%}1%ZzNs{6R-G_UKMYkmJqrhtemQKY?0)?gHL~FaQY-g;+sqR*)@pmc zdpGu;o$D=ns_hS4<&_EG!H+aj#R&v8v=@NceNv$XC!;_fB=MBCx31`8@-4;5^3?7a zw-yhfF`@NQf&s7t{r@IlUQ}O-P#}MmBOAh9*~rLB;K#>Fcj1S*dD}dop?KRb(or5D%E@*fqujGVBCvn?%{toJ&WhJL%6IK(Blst5aK1l3(go( z*F-VIu>zlbbMWS>uoO)~K%+8AH6@Nt-2#ALHUegt|u8KQLA+5r|Zx$Oy9s6b+P@m%fwZLV87_E8w5E;>6;!GLi-!JSk-yntG>GqQL>uUVs_q$$n_keq!FFj|5>{>pObveb5rz=Hn>T^>9 zw!bzDl#5oA5*JI`{Vm$)=pjc)grClS7mZ&vSPc+kxetm0WxGJNye;l+iOQvYI(GMeB!-)r*|}&eVx<`wB{KIL9FYN@~J+TzLXvZ!4Md^ z09Ryd#;n@%@m+(Y%Q_#Xh=R`82gQ=Hm$Sl*=^cztla+j?F&-0W9H1rL>2oEP%tcuyKZPvoVmwUJQ|JQM+f7VG6U*Q5c@N}3t*D0p`5GC z8yLeOY;}sWak({W%-Y0#;yXJk?P?TE{fYugRe)9>GSEHF{_8undK{*_x!=Cx1dPc1 z)Rd>UD$4{T3EYO&--{gyG!~@7VDqnipKMon1Fch^s4!r-qsvL^`AM52i~r`he8e4& zH|NP?&RxFQ_4Xq5Dk&~jU6Lb~O|`llc--Txxk8NBDoR|B!_1!s92~6SN#pKX)y&ZHFFfVBATCs5Ff0>hra&o{Hxdo<>93hwR_SuVwKrt0yz|1?5Y5V4_PIjE=1fO1qR9n)1)wSLrm#eEcfgeQ5DPtr;1F zNy=|awai!~M+;>A#*9eH={yC7JBF)`l@wlz9VE@?ci{WeC|XYw`Hw?A2U~Mio%Eh@ zl#&N+tv7&rKBfG^5Usf%GC!RMRM^OqGfFDs7Wj8Hs!a5-)Ez?AWAGgHYCJxoS<-jU z0aNX@^`ZoiGY_G+#*+ivPY^~FM(=D;bc6bN0`|RFHB+=$j$&Q5K#S?d?aOP>9RGH5 zVS~AHF>-p*QQFw)-as&mT0KjN814RU)4mO=wS|&Ri*zN=*?J8pMus@ekfXf&bKx#Q zYw=Z)%3#Q5wbMMZ!DAgNdgcryiY3ET;~q=?+uXJGah1Fi=IDp=2MY-`Z-yJ_+7S>Z zEAC1&_c2|))Ljnk{I20V_D8rD>Z{)q(64xk zwGx5&grD6FoWf)`TBxZc~UR;Spc!| z?zh~Gen|OtzJ(8P@9r^-QM=S7*hvO5xihuK9UbNQE4>;@c%oyaN^bD^87%(-_< zpUz3c6xvA_W?%YnEU_ZAPFug=wAg_6aWCIF!;F#JA@okQ*52lSSiMMs=y_xyZ|LF@ zu{eK|^r<7LoGI=;Qq5$&%H-3HQO^lBVV^jv@!!v22{brckV@!h_z5G6M&IsAS9Sf6 z$1O10oO5L>B{hv1qV-5$z|KWV)hE)5EyQW(%11KnQEih8uGwC+SNVN@!DYu?fnsj_rGao5dbp1+(r%{^cF7Kg1JFC%S|l8ii*6-&*#zX8o!BlY5qHg7 zCaur8;JeQ>uA+j{u3!QaElYz5p2y`+DEm(^U;)&Y)P8)3YBcE^`A_AZIKI+|;9X9` zEm_%uVRJGN3Km7}!8X)JD>2^{C!Lzhz?dfF%UW|LX1+o_WC3UR8&}zi+I#1+^giax z1p<9=$bMTtT&CSoW9lh{hgU*D8j{9wV|%+3sPH}i%wy|HGbc%b`(mDX+8j}Kw~t0w z##dpe^0LfF94Fr_6(Nw?GIf3A&jm{TpXq#0S&eTP3EMU>d%x5PO&g3%Rtl<*sS;YV z==d1zIpZy_Cb6sIt7`F)Dt6YkJt84Xm47Ph3#&ezDhav>J9IkEAz=>yG`*3;H$F6I z*fymj@l+B&dWh0X`F|m1)TED?!0}&r{_@Rs%s3_!C|x;pa;#j&#F6rkZjD_%H*r-kyusi22rJP>8MWgyaJSb2} zW~OFSiF!5HVc3EtH_;mfZH7VqotsEdz28kfa4={+xho`RvCng9zSxY60LzPH(a6wu zSp#pVoX8swhNK5g?MuN7F7p0ekUY9?@`Z)x`A?S;@;UB8=b<5XkQMd7X%f1wHQzME zKr9=8O9EwM7hv@TpWxs_uBCy@fheHFxwb>A(8k}PmBtUtv~KztT9k2-ACz8<%#Y-W z2Z*c@1~MNE-WBM7EL+~R%9#w}-i=|wFBo_FOgLdgibMinDozV%XyajH9}mC_sSo=;@q7x(AhZ3(-rOy5OX2AV;7A~uuQoJdLNO+Hg@P(D{#3*k?W zHp?!?r=@Fv)K^6}yi0aLmwzqu2ES{o1@~_2p24c@@y9%h`Jj)2p|6G)`Ji)Z8bFPz z42J^CLC)jSX|URIX+e)(8SmAhMYbJEY@B+aCGmuq-wHoM!(uQa1(atbBUktyhTY_e z`BwvKrNZk!f^T)+m)?^~Xg3l51@*4sWyzSjQ17#eue43W~6VL_Nwi zA_Oo}8~PF1#3FSK__VVgpMURe1N7qNC{4N3g;g;J&FANK+mHCgEsU5d+rvvK)$bB6 zS4L)wV_Z7_eq1LR%JP@4x`7F=B23{00*iXt(yqzSM&L5?q3p25BXDP|NOMa?1Y&R z8i5T+pA>zt-XUAB8g(yxCMy;La`Z%st)2vM2w4{&g`RrF)!nuHB|F%obxMHx1mNc0x64<&H z7*0T*vfe#PGn3-tMr4{AN^M0)V6$0TRS=)!LL(u$=Lq?KVrkWAW?iS2+43!AytFU( zF6o6;$S|RLkp2K}nN@dcoj!2l-VIY;cr6RGQ<~VkvwilRR#}3IP8pxxVNo>e`$;0f zNB*^FAQ4T?x`;Gb9m+b<@Yc<#8g-^)pi_p2@H~zuu{F5^z#D}&T4lJ41NSZ?7j1_Y zqMJb(j&iy(bb(2LP&q#C#eac5ORXA334P4-50^;5od9t%5x)_U<2k5)R-Ob31MzDK zPl3Lh2yJy+$&!HONC~Xb5%AP)^im0-xQyp_^2z(+9GN#Gxg2|$a;JyjJEvyOxm3CLE!If&N;3TAKhr^fuYm>}!U&5qYi5j!p&K|hAF zOqmG+2$a7%?npaGMo!D>?(UAX0-a-i>)u;O6`?$a)p9?3dN7+giJxRc&;(jTlo-r> ze~z z_@n)X6EcXGk#4wpK4QHl*w*jc!vx&5<_;h=%Lf)kq<`5+d`Cg>Bi0Bx@|3=+vR8$_ zif1%ZLfR&g$6D-^3HsftuD;zlJ8&&};RKv6f}ndd9oIPR54RWee6e1%U4lvM{Qsv# z?&$n`6?%BIV=l7pk&eC3jA5zzeajP7HL7j{UY}^!FCeejNvqd20~JnhhQy>Pb@eOK;NvG?w6>|9j!We+Iu?w|n^ZsB~0S!*z6Y6hbKI*94_^ z0P@6s@7_Hvo$vP)^{BMiSpRb+)~$a-gahntR&BMssGRZ(Yj!le%+A3MA|!l%=Rw2qizv_{-kt%<9f83 zyP3A>uMZiCwO=%n-|8IyZKtdTACg=fHwvTp@!0?Pfc$m6kn51)dR4`_ha|A1_> zoM)~y765PMIGzKB2dv453j3f}MkXFjJX3$P=u=()7ZQlYSw1ZTT|#b~DZ{%XGo{6p zm`M-bs3G|SD`Z|C|LV&CxB*$9Lq{~X5^Ru+l3~hrYWEt;v##Z#9J=s3bGZR@#G!!8 z2ZW(O-F6CyEqz6R9*@3CNt`mnrS33B!H=I>_4l7N?tKqbp*LhMSkvb|vnWmyC3|5_ z$PrPlYS{ap52`H*z|*6OD(P~JD$kb_RoUi7eBc>UW5LWbkX*JqeG4^<`i9i>_?206 z?|@_pUW?Ia(8FGDf8(-qTSg?8GClIlJR3>#oAVxy!xf1K6ovmYY_PcJ1BMNxaizva zT-qS_>2A>L%1vb1-c5nR;2~M+!Sn{)BOM7p86z$$m<3y(jhX{P3Cjxn-6>rV$ne~o z1;On^_I7?h7X=32W~C?521jn`QwlaL>F$O_#xD!anjF5B=0dhf0mz8H9$ZNQDO-wH zFJ7n)&?P3fY3g+7g3ZYsjT1K|jg6K{xd;Hxyi03@%-^Q)eneS0~e zc)nEeZsST(r61N^_6VD^cRxmPDWU6>ocyOui`^axQvd;_y1hTPU$;Gw_+ouzGlQCt zK%xtr(f#c0M@I`)%1R3#EJ&(HkZJjlK$g1@CJT_3u%M)_B@jwP#B5OvXY&(yXW6Cs z?Hm&RonbAJrC%>rrZVilL+{kk zwDXflGXtzhy5yiJTaCd#M=AKE<_Vi5UBZA~M@q|qA2VX6*icW8!ifY z^bWXxg_3)-$e(33EH2xQH@4d_*A6$9#w$M>xnaA#Lx{TOvT_xHUHisy0iyMFhzb&Q z)0wY4dMi@@=hOXnK-Y_Nc@swR287P>Z;S`_e*Ub}FJ5RM#E}OU_)G{*4slB}6$ykw zdbN{tp^T3<*y>KDYqZLpn{fdd+RSe}3&4}L*Fli_g-$VBwFJ?gb=` zwpnJ@CVHF}k=UNSR9Bxffo{LwUxL^oL4`R_DZpvfOM2J)_nTnz+l2bMTvC#WGLj>D zBtVyYoupQsEYOY6m7*#xy5a326L0)dU7S8L^sZ;z)A^oFpb5&yk|K_$FT8DaLXBOYNbijkPBiKwIH49!LG5tkZ$)#MV6`GnA6qFzhP1mjbYtdNVC2s6KZ zhG`P`048Pb!+PYUrGlsbv}d0U@Sa0*=SG@oaiY?%N8x>kB#{$owl*ns^a-71?_4+GZpfgIYaZZ>9@*nd=(F7;frtKdoest0(J6^GT(7!MO&?`|W6_i*G-RPxJIt@Rusn zvJNod8S_w^Esj<17cC?r=%MYe`Mvg;JJiSm#lQY$fS{AqY#*I$DT(a#Uurzveebsm zmn9nxYQEkL($$|V7D@|KU=c?fib>Fkdb~|4O=s}ANsq1NdUUK)SrlF7l^!FrM~}QG zieNz>C5HJWXKz*Wl*YnG*Xmx!dunNNF6Jawcg#0YA977v8`UI(44mv&MH#g7#@F%m)K3_ta z*wFkr$e=h#%pG#o^+vnat*(`H_nb;lCwL|ZxiPIzmTBRpx*Tu+K5r>k5ElZ=}VI+;e9v}!_nh^LXR%F4!NE3$Zn1U1@#UenNa=a0(ByyS& zrQ%zobh7VS+8rj9(j7Tdqj2JHt+CNuDHlwy!ENN0+kF|5Qr#R= z%N<8O$6vSK17FX)JWmp(e>32pY@(<^zl&V`?Lzoda#d3wcaF+up5Dj9T8(?Tfr6`- zArMC}P0O^TE4NCBUkk$^Dd;+SvOPYjyWP%LMUg8i*%T4$KlwLHMFjDkRtjF@;l>2A zd@{gLKlHCvxQd^UL!Yz{X06ii*j?7q2SI0(H$gIJbT1YG*r;tF^9 z!*gRhvEbYG-k)GLJ~2<8s4%j_g;@kod`To_*NKGPHVLFl4OpRJPPy8AdY+&Qit8Gz z7b|u$Vv>PxW0wkfL9ZZ|a4??>4_oNJb`QDm9sZ#VbVn@(%uM3o^tJ*RWLfOfu$zkD zV{(wz_Y#b3nh$0v^QaJW8f||>NpZB#8OMUV+1<8$PQe; z%^r22;aq3!{VA9}u)vmVs3CC_q<+jUGt+lPmdc~1G;c-=BW&*=_orGlg4YhxRYVH( zoJ4sP09H27O(GU3)ZnLDCcdQ>Z@goWcL(3F>#~~@&(GC#Jho3xFW>C&CpKrFI|lSS zh+c7a;A1eB0hX&Qe*`9?=kEgoA4`g_d1Jz88|Qw!7d-ycIMf5M&Uw)8$Zh>evpX zqQMK=RRmikWT2Z76kT`WA9CSQ9>5-tW#~M-NF2vqXR9~Y>X(Olnw4R>LSLh8Flv&p zCpqx!M1P4(d84y#4+@BIXd4f@vYi}VN!ld}VzThfF@m?aEh)mfG)o=R%_nbp64POB zLW=7O@^3tPO+|1`grTx4VWp!CW?n1rJ@`B=3&XXAb{HaAUK!j~U@_%?Q~p z1FZ=&0m6`J5#|LWzfpXJ<{|7F?HLllfM9hpsQTqi9%bXOa_v(Xom&Zy5B869-Zh${ zhwtd(Xg)tB7n=fHf#wYe)+nipgaC2I1Ob44M1y=VL!Sk#rioR^j-?3)AzG1>oy9@Aj(8k7aoj&Mr5PSb;Kg< z$+XrL?6EUV(gdjU+&j$;*h4-4q)Q<`Cf*xJtQJ@LG&3>13~bW)9g=E6wA2N z>P_kfS$#22$6G^I`;K-qPYBH&pk)C0KkG67#qZ*pXpSv+8cZSbJa+jMA&0s*;@U&9 zQllD#UB8KWfNqrNGfE?N5J(yT2>7NgA}z5b2;Z|wi^{;b@T0%ysq2$3zpD=04G0?Z zzTSPU?bmrQU4IQ2Oc1>Y9}US7?q%uTv9|pBVUxyoB#Of5`xEcXa$sOhS3Lg@-S8lM z$tE2tgYVF68@;n9qwPC$bx=$WWj=THzo-sif?AlX%_m)#qCRZZ&wi2ic=gsb{e*Ev z{=YUSUU6=30j9F<&7H+}BILd9ZI|_F&yPkd%ai-lo;dY?FOEtGYN=M5*De$EeB^vs z6^he-d3nes~0n;%1 zED8u`eSWpxcz#!PQqwm>_5ZLN(`Ks6vt48Yb0Wc|n8na6ISP$IcY@J7>Gk=0;*~nnR%5{+u+!6!HEuw=1U@%i9%hC_By;a&GXICfD5Pt-( zx8`({cIlqDP+q{NwL5sm#>oHT*A9k4bq|jrx<;H&SxuT8?8X4+>Us~tvJH)88|`MQ zm9e-*`a+2T`Lho`%XkMF0o+>VxxC)U!#)J4=2{P{^jbqtoJ~%P>iyFr-ps_632pr# zX)^IGmr3`cc>14b>6M~3<( zZUVR)Aldo;6e1*tk*@^jhm@a=n_OGHid9Th^{dt`ASu~1u5kWCscgH>FM^9Q$qV$0 zxc*9}8o!n_E!WAJ%!H|CF0W&hZNp zZ>$z$7bdlI)G)v^$E59A7v_zZEYqgOpVkj)Z4n7ffnUkN2Q17WT#<;S zkh_-Fy-9c5gUM?W37Baf__SwF3#TKuCjI|3bLRhSW_ujBT)K>sWqV~01`*NSBy?0)7f4)E5 z`v;uld(Ly7^PF=&@6Tri_42F>&XuV--hK#S)(A*~DzSgw)28@z z+0cb}R}wF}wL0+`?07`Un|18v!Gf1cr-fqSaz2!U59^_jODhy8UGyS2*Tx=;Lbf9N*Q73@)^8O6k?r@8~DCXgvG zkA*8Jn{w_Bq9l*oi;Q=d?bt=aJnDFoxxctJ%BND7PfY^^-0s8I=Nf#6)b?3e^$!%# zs)g}0A<%u`TL4Q39*P98T%W(7Bn_pZ-TbRAKVkrZa7O$j*c4?Xx>XJ`h&IlX<_R>! zw&=Z9J1n2LPp$XF#;&ID4`#XrxNnf7sDG1jLF9}`)G46dkbkcdDcze+umC`ZC5?F# z54@!iQ6M2m+Aiz5(7{wSqQMdnZ~Z{rQ*zk**RbVJW6+aJb~Y(z(|ohKJc~O!YXRw> z4dBd23AbFbS?f0_x3o0YL@)D!iBzdP@uS8jE%WM7L%R2K=(crV2moKi9bEMYHy$o8 z4C;{|d;vXqLBmQiaE--N%-p0fMv4|N z+s#N8rn+po?YZAa=WRmxXOXC54o@v5#TMnMyJu~^+|efjX8jO|l?emc8pJ zc+sn*h~aU)H#eT&YboI<;SMMhB{a2{X)7k=xuXyte|Pk5&{%)E?(9^FJ@9{b#&eL5 zhqlF#sn!RP6*BudNb42)VcEWVn{RoDnDT%f_Tv@917?6dsxCh7@KO)vdL)SF$-Z2J~l{*Smgs^u08c>oQJt*Kh7)QHt#Q z;Izo!@QCb%@n@=k?mpk+#G-LdFY^3hT-2l4h z$**67^2>7DOe%=^`{km1B+q2F%AK|e@7+Ldb(|{7QU@4j1;AfIJbh^Pf{PaEk$fCB z@7eZqSFBa&z`bGx8p*XIx-wzgyL*5$-ec+hL3 zDB#F+dinrn@!h=xk{f*S-5b>?RBq^KEnx=zI*y%jUq3GUe4YIelUgXtJKLWHb_l=I z-vskkz^Ml0z=H1-yGLd?oS9SYI8f+N<+ib4u1kq~J$j8Js%bzHPdCXoZOrzQj$O!m>E36PV7u1R@+8Bblnd$%MccOCfZe>-KR|;8fLO#S&V7qVF58 zjMF2umV&Rqx;U9<)&dWVpo|U#7MN@d9|&!|W+n2t;6gm{kr36aLs;gyi7+fFpD(y% zJ9vN+V1PT)kJ0`S!*f~8ezU_BUo`J*p!I3u2ZTfM>k@tPiHFlhd^9DHc z^EP3zUIu4oCiNtxb+gr`_2Mdk=?2@$PJ&&~`BwQpE7D$FyX*C%as2&6iYm7yp0kBt zz=E=V8`+zB{W!4(fHl}AjEP@O!~eS=zW*xvPp@-!LnAU9VE8b-otvwGm-uC-DV9e> z3P6tPGH>GzkzG7d^7@m79o0L`B}QxHM%8vh$hW)g3J|+W2M~YqB zj&JnzVqr*wm62>0OYoWFDbeD_rZxrSZK`Gj?KLIJpX4hBS-m^5=o z@V+qv{naXZek}DU8#>^i_H^aJv{Pq4Iqk9X@DjB$fByEvQwvntbA+%_zcc}G2cUQ} zm!bx#?sIF4ZpKt{6Ru+j`^W;XS!Jw$3fEj$k$z81XGG`Tk)S5khYcxVFp1~r&WmG$0)zQB_cRGu*YP9+ zEVq9te)MMUCgT&(8nl^ppVb>S?8$I+ z^Hy#yYj_8}nJ=#L57h>49cLH6>d13|W11|8UR~y)Ll^#Gl@JCE9iW65TvsE&lD!ed zzonR_o!+Q?xN-O)4>+rg>p8YQ^@XsZY`zvtfML1K$*2I$TaiZxyNqLhZ(u5-bS2BGQeuYM2Fzo22@1MWoDc)t3+|8Md*|8p5|mOAENe;g+kv`v3p{ literal 0 HcmV?d00001 diff --git a/img/Courbe_Python_sort.png b/img/Courbe_Python_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..08692df63d6e00e03ea201c516899769e0ef6a4a GIT binary patch literal 34532 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 literal 0 HcmV?d00001 diff --git a/img/Courbe_Selection_sort.png b/img/Courbe_Selection_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..78a8c7ef0f4519add7ef9a5605e81f5dee53bbc6 GIT binary patch literal 28457 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 literal 0 HcmV?d00001 diff --git a/img/Tableau_Range.png b/img/Tableau_Range.png new file mode 100644 index 0000000000000000000000000000000000000000..69bb40d6bf8e1b6a1a4f83976ce22e0b26a4a78c GIT binary patch literal 9099 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 list[int]: - return array + """ + Fusion sort algorithm + + :param array: + :return: sorted array + """ + if len(array) <= 1: + return array + + # Split array in half + middle = len(array) // 2 + left = sort(array[:middle]) + right = sort(array[middle:]) + + return merge(left, right) + + +def merge(left: list[int], right: list[int]) -> list[int]: + """Merge two sorted lists into one sorted list""" + result = [] + i = j = 0 + + # Compare elements from left and right lists and add the smallest + # one to the result + while i < len(left) and j < len(right): + if left[i] < right[j]: + result.append(left[i]) + i += 1 + else: + result.append(right[j]) + j += 1 + + result.extend(left[i:]) + result.extend(right[j:]) + return result diff --git a/sort/insertion.py b/sort/insertion.py index 73a21d3..b895595 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -1,2 +1,16 @@ def sort(array: list[int]) -> list[int]: + """ + Insertion sort algorithm + + :param array: + :return: sorted array + """ + for i in range(1, len(array)): + key = array[i] + j = i - 1 + while j >= 0 and key < array[j]: + array[j + 1] = array[j] + j -= 1 + array[j + 1] = key + return array diff --git a/sort/range.py b/sort/range.py index fc252ab..033c19c 100644 --- a/sort/range.py +++ b/sort/range.py @@ -1,2 +1,11 @@ +import random + + def generate_array_of_number(array_size: int) -> list[int]: - return [] + """ + Generates an array of random numbers + + :param array_size: + :return: array of random numbers + """ + return [random.randint(0, 100) for i in range(array_size)] diff --git a/sort/recursion.py b/sort/recursion.py index e7f4320..a26aee8 100644 --- a/sort/recursion.py +++ b/sort/recursion.py @@ -1,2 +1,11 @@ def get_factorial(number: int) -> int: - return number + """ + Gets the factorial of a number. + + :param number: + :return: factorial of a number + """ + if number == 0: + return 1 + else: + return number * get_factorial(number - 1) diff --git a/sort/selection.py b/sort/selection.py index 73a21d3..7d67ebc 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -1,2 +1,15 @@ def sort(array: list[int]) -> list[int]: + """ + selection sort algorithm + + :param array: + :return: sorted array + """ + for i in range(len(array)): + min_index = i + for j in range(i + 1, len(array)): + if array[min_index] > array[j]: + min_index = j + + array[i], array[min_index] = array[min_index], array[i] return array From e2dff2261eadafd424f1d83c4b6fad3b930d50ee Mon Sep 17 00:00:00 2001 From: Nathan Deroche Date: Sun, 26 Nov 2023 19:39:43 +0100 Subject: [PATCH 2/2] Small Fixes and improvements --- __main__.py | 1 - sort/fusion.py | 46 ++++++++++++++++++++++++---------------------- sort/insertion.py | 31 ++++++++++++++++++++----------- sort/recursion.py | 5 +---- sort/selection.py | 34 ++++++++++++++++++++++------------ 5 files changed, 67 insertions(+), 50 deletions(-) diff --git a/__main__.py b/__main__.py index e865c45..a02c75a 100644 --- a/__main__.py +++ b/__main__.py @@ -62,5 +62,4 @@ def main(): print(f"Array size: {array_size} - Time: {time_metric}") - main() diff --git a/sort/fusion.py b/sort/fusion.py index bc0bc7b..5d3d7ae 100644 --- a/sort/fusion.py +++ b/sort/fusion.py @@ -1,36 +1,38 @@ -def sort(array: list[int]) -> list[int]: +def sort(input_list: list[int]) -> list[int]: """ - Fusion sort algorithm + Merge sort algorithm - :param array: - :return: sorted array + :param input_list: The list to be sorted. + :return: The sorted list. """ - if len(array) <= 1: - return array + if len(input_list) <= 1: + return input_list - # Split array in half - middle = len(array) // 2 - left = sort(array[:middle]) - right = sort(array[middle:]) + # Split input_list in half + middle = len(input_list) // 2 + left = sort(input_list[:middle]) + right = sort(input_list[middle:]) return merge(left, right) -def merge(left: list[int], right: list[int]) -> list[int]: +def merge(left_list: list[int], right_list: list[int]) -> list[int]: """Merge two sorted lists into one sorted list""" - result = [] - i = j = 0 + merged_result = [] + left_index = right_index = 0 # Compare elements from left and right lists and add the smallest # one to the result - while i < len(left) and j < len(right): - if left[i] < right[j]: - result.append(left[i]) - i += 1 + while left_index < len(left_list) and right_index < len(right_list): + if left_list[left_index] < right_list[right_index]: + merged_result.append(left_list[left_index]) + left_index += 1 else: - result.append(right[j]) - j += 1 + merged_result.append(right_list[right_index]) + right_index += 1 - result.extend(left[i:]) - result.extend(right[j:]) - return result + # Append the remaining elements from left and right lists + merged_result.extend(left_list[left_index:]) + merged_result.extend(right_list[right_index:]) + + return merged_result diff --git a/sort/insertion.py b/sort/insertion.py index b895595..bb3f149 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -1,16 +1,25 @@ -def sort(array: list[int]) -> list[int]: +def sort(input_list: list[int]) -> list[int]: """ Insertion sort algorithm - :param array: - :return: sorted array + :param input_list: The list to be sorted. + :return: The sorted list. """ - for i in range(1, len(array)): - key = array[i] - j = i - 1 - while j >= 0 and key < array[j]: - array[j + 1] = array[j] - j -= 1 - array[j + 1] = key + for current_index in range(1, len(input_list)): + current_value = input_list[current_index] + position = current_index - return array + # Find the right position for current_value + while position > 0 and current_value < input_list[position - 1]: + position -= 1 + + # Once the right position is found, shift all elements between + # position and current_index to the right by one. + if position != current_index: + for i in range(current_index, position, -1): + input_list[i] = input_list[i - 1] + + # Place the current_value at its correct position + input_list[position] = current_value + + return input_list diff --git a/sort/recursion.py b/sort/recursion.py index a26aee8..b15df85 100644 --- a/sort/recursion.py +++ b/sort/recursion.py @@ -5,7 +5,4 @@ def get_factorial(number: int) -> int: :param number: :return: factorial of a number """ - if number == 0: - return 1 - else: - return number * get_factorial(number - 1) + return 1 if number == 0 else number * get_factorial(number - 1) diff --git a/sort/selection.py b/sort/selection.py index 7d67ebc..f950c37 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -1,15 +1,25 @@ -def sort(array: list[int]) -> list[int]: +def sort(input_list: list[int]) -> list[int]: """ - selection sort algorithm + Selection sort algorithm - :param array: - :return: sorted array + :param input_list: The list to be sorted. + :return: The sorted list. """ - for i in range(len(array)): - min_index = i - for j in range(i + 1, len(array)): - if array[min_index] > array[j]: - min_index = j - - array[i], array[min_index] = array[min_index], array[i] - return array + # Iterate over the entire list + for current_index in range(len(input_list)): + # Assume the current index is the index of the smallest element + min_index = current_index + + # Iterate over the rest of the list + for comparison_index in range(current_index + 1, len(input_list)): + # If a smaller element is found, update min_index + if input_list[min_index] > input_list[comparison_index]: + min_index = comparison_index + + # Swap the current element with the smallest element found in + # the unsorted part of the list + input_list[current_index], input_list[min_index] = input_list[ + min_index], input_list[current_index] + + # Return the sorted list + return input_list