Exercices sur le tri et la recherche dichotomique

Sur le tri par insertion⚓︎

Dans le cadre de l’algorithme de tri par insertion, on construit progressivement une liste triée en insérant un à un les éléments dans leur position correcte.

La fonction insere ci-dessous illustre ce principe. Elle prend en paramètre une liste Python tab contenant des entiers déjà triés par ordre croissant, ainsi qu’un entier a.

Elle retourne une nouvelle liste, construite à partir de tab, dans laquelle l’entier a a été inséré à la bonne position pour que l’ensemble reste trié par ordre croissant.

Ce type de fonction est utilisé à chaque étape du tri par insertion, lorsqu’on ajoute un nouvel élément à une portion déjà triée de la liste.

Code à compléter de la fonction insère

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;dv,n2.S5éwbcy+14q: f-up08)_I9eklohrPè=[sà6(]/mg7050g0J0c0e0b0L0T0y0r0L0e0T0T0R010c0b0C010406050T0B0Z0Z0e0O0s040m0M0L0B0_0M0j050Y101214160~0C04051m1f1p0Y1m0~0g0b0h0.0:0=0@0:0j0!0B0e0!0J0A0C0s0c0N1d0y0N0b0!0N0L1R0N0c0|050)0q0L0J1y0;0?011Q1S1U1S0c1!1$1Y0c0O1n1M0.190T0C0e0j0@0k011(1A010z0+0J0j0e0Z0J1Y1}1 241*271$2a2c0|0a0y0P0O0M0C0M0T0b1c0j0y0%1{0O0O0J0r2x1f2f0j1n0Y1M2K1@1_1^1Z0g2h1B0b0j292u1Y1v1x0/1)2U2W0j0M2!1Y0C2D1n2I2K2;0 1~2y2$252*0O130L1Y0e1P2D0z0@030G0G0r2+0J1U2)0M0A0D0A0u0|0y0u1f0e2=2^0}2@2g2`1*2|2~30320J340136383a3c2X3f0A22040y0k3m3o1 3q2I2T013v0e2 1n310N333537390%3F2*3H0d3j0d3N2H3p0~3R3t0@3U3W053Y3!3B3$3E2V3G3g0v3j0v3/1g3;3r2_1z3u0M2}3V3x3Z3z3#3D3(413*3g0n3j0n472;3=2^3S3_4h3}3C3%3b4n3e3g0V3j0V4t493?4c3^4e3w3X3y3A4B403d3H0#3j0#4K3P4v3s4N3T4P4g4R4i4T3 4m4W3g0E3j0E4#2J4%4b2%4*4f3`3|4j3~4l4D4=0A0I3j0I4`3Q4w3@4 4Q3{4S4k4C3)4F3h0D0|0u0D5c4|4x4+515j545l4E3H0u3i045D5t4a5v504z534U4;423h3J0u3M0Y3n3:4$5I5f4y4-4A4:565P0u3,5F3.5U3O4{5Y4)5!5i4.5k4V5)445F465.5W5:4M4~5?524/555m5C4q5F4s5 483P1q2/1f2!2N0g1_2S5f4C2Z1w1n2.0J2:3p601n4C6v2g0b0g0@372I5C3x6C6E675B3g3i0y2l0J6K5A575E3/62250K0|0%0z6x5;4~0p3j6%6X3u0z0|2V0T0J2D6,5e4)0{040W6^4(630|1!6~4}256{0i6x0y6(2{0|0e733S6{0F0x6x0~6e2J5I6J016F2^3H3J5i7o5%683g226P2b6R7p6L577t5 6-0@6*3K0y7M7e5f0T0g0|020w0B0M0c0f7T7V7X7Z7W0f7j7e7v0G6G3g5+7u6D7D6T5P3,7A2c6S5`4o0A7/7H6_4~7Q3j7M0y0H0j0T0Q2D0y0L02030d0I0f0o0L0o2c0j0c0y310W2V0c0F2z1 0-1$0y1;0J0e0B8z0e0q0y0W1U0T8t7)7l6A2y7+7-0A5|7:7{5O7}447_7C7w6M8S1Y806 25837L7M1@0b0o0y1~0O0y4e0g8b0r2r0b0=1 8o0U0y0T310C0:0r1%0(0y2D0j0h0M0b1%1$8M2?3R8Q7r4p6I7;8#574q8Z8V5(7}6a6W818+7R8-6P0M0B0h8B8D8A8C0l9j6w9l9q7,9n0A4H4R7+7?7}4H9u7=7|5n9U9z8*1*8,850y7$7#7U7%9/7(8N7k9k4w9m1 4X9p9v7x0A4Y9!9r5P4Y2K3n9-7a3u718F0G7d8N797I010M0|0R78ab0@6{0Saoaj0j7cat9A1*6{0Xax9*0@al040taC74ac0472ahap010r5E039E9G9I8E1#aV398n29908p9N6f9P6K8R4@9V9Q9X5n4@a47E5Pa-3N9_9O9{9Q8R59a.a08$59a?a:3Hb03NaaajaQ0|aS101w0b2z0J0-8j8l290c0-2AaM4u7*a~9S5r9 9#8W5nbwb59$5C5pa89DaOav040baI3SaFanaNaj0Z0b0|5s9^bta+bv6V319WbD6N6O6Qb26U6V5.baay0@6Z040p1Q9ibQb:3T6:bM5faF020L7Xb~5=0q0|2k7O6`0|6}8NbIad0qc94~7gc44~0M7K1 0gck7b04ag2;aib{c00!c3b`aDb|aLaecta|cBarchcrbLcAaJaE0|aHcM3SbS5qcJaz0|0X7icR6oaR0ybh2V0z0o0O9g0B8@920:8c1d1E0Jc.biaW0i8H1!af0y0A3k8u9a318Kc,2F0J8m8o100Cc+c-c/aW0Sbh0t0u0Xc|blda0y92942z8}0c0Ja(7ma*7D8R5Sbxa57}dCbCbz5C7Ga99-85cecD0qafcVaq0|ascdaub}dWb{aAcq1*bOd$3^cfdRdZcHdUdScCcL9`cBaFcQd?cN01cT5Fd:d#ah0ya{a)a}bY9}6N7/b#a/b%3h7^b*by9wbA7 dLdMcvcBbJc~cFe4d.04dVd`4xdYevb cPd:d}3ld-d{e0cuaOd(c!5=awbWeEc%bue73h8Teab+5{23efdEbA8Tb.elemd{bJd=3pe(bNamd)d;e:d^e:eC78e3dye5dAbv9yeUega10u9teYa@dF9ye$7Najb=2D0cc.1eeK70dPd,bscd0Y6z6g6u6i6r1f0c6lft2Q2L8F1$2K6j7k0%0)0+0T04.

Sur la recherche dichotomique⚓︎

Soit tab une liste non vide d’entiers triés dans l’ordre croissant et n un entier.

La fonction chercher ci-dessous doit renvoyer un indice où la valeur n apparaît dans tab si cette valeur y figure et None sinon.

Remaqrue : si n apparaît plusieurs fois consécutivement dans tab, un seul des indices sera retourné.

Cette fonction applique un algorithme de recherche dichotomique.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;djv,n2.S5éwbcy+14: f-up08)_I9eklNohrP=[sà6(]/mg7050g0J0c0e0b0L0T0y0s0L0e0T0T0R010c0b0C010406050T0B0Z0Z0e0P0t040n0N0L0B0_0N0k050Y101214160~0C04051m1f1p0Y1m0~0g0b0i0.0:0=0@0:0k0!0B0e0!0J0A0C0t0c0O1d0y0O0b0!0O0L1R0O0c0|050)0r0L0J1y0;0?011Q1S1U1S0c1!1$1Y0c0P1n1M0.190T0C0e0k0@0l011(1A010z0+0J0k0e0Z0J1Y1}1 241*271$2a2c0|0a0y0Q0P0N0C0N0T0b1c0k0y0%1{0P0P0J0s2x1f2f0k1n0Y1M2K1@1_1^1Z0g2h1B0b0k292u1Y1v1x0/1)2U2W0k0N2!1Y0C2D1n2I2K2;0 1~2y2$252*0P130L1Y0e1P2D0z0@030G0G0s2+0J1U2)0N0A0v3f0|0y0v1f0e2=2^0}2@2g2`1*2|2~30320J340136383a3c2X3f0A22040y0l3l3n1 3p2I2T013u0e2 1n310O333537390%3E2*3G0d3i0d3M2H3o0~3Q3s0@3T3V053X3Z3A3#3D2V3F3g0w3i0w3.1g3:3q2_1z3t0N2}3U3w3Y3y3!3C3%403)3g0o3i0o462;3;2^3R3^4g3|3B3$3b4m3e3g0V3i0V4s483=4b3@4d3v3W3x3z4A3 3d3G0#3i0#4J3O4u3r4M3S4O4f4Q4h4S3~4l4V3g0E3i0E4!2J4$4a2%4)4e3_3{4i3}4k4C4;0A0I3i0I4_3P4v3?4~4P3`4R4j4B3(4E3f0D0|0v0D5b4{4w4*505i535k4D3G0v0v5p3k0Y3m3/4#495u4 4y524T4:413f3I0v3L5G3N4`5K5e4x4,4z4/555R0v3+045+5s5Z4(5#5h4-5j4U5*435-455W5I2J1q2/1f2!2N0g1_2S5e4B2Z1w1n2.0J2:3o5 1n4B6g2g0b0g0@372I5B3w6n6p545l6s0y2l0J6v5z565D2K5H4L4}0K0|0%0z6i5:4}0q3i6O6I2{0z0|0s0O0J0P6Y6!6T5d4(0{040W6(4%4}0k0|1!6.4|256+0j6i0y6P2{0|1e473O6~1*6+0F0x6i0~72603Q6u016q2^3G3I5h7e5(6x3g226z2b6B7f6w5A7o1Y5W0y7z6}6U3t0|0b6|740@0N0|0R7G7C0@0Z0b0|5r7b3J7H010s6F030y0H0k2w0b3U0b0T0e2x2z1%0b0y0e0B0y6e7P6!0y0p0L0p2c0k0c7.0y6?7T7a2?7d6o7t6r3g5,7k897m7v0A3+7q2c6C5_4n8i7x3m7A7B6)6:0|0h7M8u257J047L7T8t6/8A0|0m8J8y8G1*7X0|7Z7#7%7)7+7-2A0h7;7?0%0P7$7`7|7~29812A844t6@0y7l0G8b0A5{8e8m5Q8o438k7s8g568^7y7A7V6K040q1Q1$8L6^7D048x8E7V8B020!0c0f8D2;8F9c3@7E8/5e6+789g7N7W7Y7!0L0y2D0T0c1%7=0y0Z0N2V0-0B2y8(7 810U0y0i0p0P0b276%858/8;8?4p4Q8;6D5R4p8~8`5)8o9)3M866h886v8?4G9*8f7u564G9/7t9,8o9}3M8s8s7V6;040Z9b3R8B9n3o9p3R6+6-7Tab9s9x8z1*8B0uaf5!8w9t6*0|0Faw4(8B0Y0YaD4}7P0|5V9o7V8O047Z2V1v0s1%7P1U0J7?8*2D8:0y0(0y9f8.ao9`8a7h3g4X9~9:7n0A4Xa3905Ra;a8a97z957E6Nar8M9r048-9_as0@6+0Saz8vadbe6_0|0XaI8H8Cai3Oakax047187ba019vbl8N9A2y310p0c0p832r0B9V799$9 8?4?a=a48n5m4?a`a05RbOa~a aa9y962D0c0B8#byb6ae9#a,4v9%a/576t9 a55m58bUb_3G586G3JbZb1049Yb+3S6=0e0rbh750|bdb/b5c7bgcf9qbwbjc69i0L9lc6acbtb9cgbxb4ckaP7Z2y0k02030d0I0f0J9F7@0;2z1 0-0:cK0P0_1%0!7=6$82cP1U9F0JbKcj8:bMb=5qb@a?8hc+b|bR5B5oc0bZa9apc4cn7Kcr0|b-aN9yauc6aK5-c$bu6mc)1 5B6F8_bQ8{5m5C236Ac-6Edd93a c33b0Tc#c%9u0|9wd1bvcz6z6zcDcFcHcJ1~0-0gcN0ycP1~cR0b1%0g2r2wdQ1%cY7*9Gd7cu2yb;db3g5Uc,df9;dh7pdkd+a@d)c@c^949yaca*aj9hc}cx4wc c|040Ad47Qd6b.d8d#da0k5B8d319+c;d(8jd/a{8o5+8q3pc%d$ecd(8^efb^eh3f8}ekbVem928rd^bvb$0(b)ctbp950s0|0M1ddta+2?0Y6k616f636c1f0c66e!2Q2Lc91$2K647a0%0)0+0T04.