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
.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.
.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.
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)