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
.128013oIèP;f 8lkg5:+,bry2a1éh3tvw=u6e[(Sà n9]_s-c)7im./4p0d050!0F0z0u0T0j0O0h0Q0j0u0O0O0C010z0T0Y010406050O0D0U0U0u0r0s040I0b0j0D0^0b0K050W0 1113150}0Y04051l1e1o0W1l0}0!0T0A0-0/0;0?0/0K0l0D0u0l0F0P0Y0s0z0x1c0h0x0T0l0x0j1Q0x0z0{050(0q0j0F1x0:0=011P1R1T1R0z1Z1#1X0z0r1m1L0-180O0Y0u0K0?0t011%1z010g0*0F0K0u0U0F1X1|1~231)261#292b0{0a0h0e0r0b0Y0b0O0T1b0K0h0$1`0r0r0F0Q2w1e2e0K1m0W1L2J1?1^1@1Y0!2g1A0T0K282t1X1u1w0.1(2T2V0K0b2Z1X0Y2C1m2H2J2:0~1}2x2#242)0r120j1X0u1O2C0g0?030N0N0Q2*0F1T2(0b0P0Z0P0v0{0h0v1e0u2;2@0|2?2f2_1)2{2}2 310F33013537393b2W3e0P21040h0t3l3n1~3p2H2S013u0u2~1m300x323436380$3E2)3G0y3i0y3M2G3o0}3Q3s0?3T3V053X3Z3A3#3D2U3F3f0X3i0X3.1f3:3q2^1y3t0b2|3U3w3Y3y3!3C3%403)3f0m3i0m462:3;2@3R3^4g3|3B3$3a4m3d3f0E3i0E4s483=4b3@4d3v3W3x3z4A3 3c3G0S3i0S4J3O4u3r4M3S4O4f4Q4h4S3~4l4V3f0i3i0i4!2I4$4a2$4)4e3_3{4i3}4k4C4;0P0L3i0L4_3P4v3?4~4P3`4R4j4B3(4E3g0Z0{0v0Z5b4{4w4*505i535k4D3G0v3h045C5s495u4 4y524T4:413g3I0v3L0W3m3/4#5H5e4x4,4z4/555O0v3+5E3-5T3N4`5X4(5Z5h4-5j4U5(435E455-5V5/4L4}5=514.545l5B4p5E4r5~473O1p2.1e2Z2M0!1^2R5e4B2Y1v1m2-0F2/3o5 1m4B6u2f0T0!0?362H5B3w6B6D665A3f3h0h2k0F6J5z565D3.61240k0{0$0g6w5:4}0B3i6$6W3t0g0{2U0O0F2C6+5d4(0`040H6@4%620{1Z6}4|246`0p6w0h6%2`0{0u723R6`0R0n6w0}6d2I5H6I016E2@3G3I5h7n5$673f216O2a6Q7o6K567s5~6,0?6)3J0h7L7d5e0O0!0{017S7i7d7u0N6F3f5*7t6C7C6S5O3+7z2b6R5_4n0P7!7G6^4}7P3i7L0h0c0K0O0d2C0h0j000w0j0w2b0K0z0h300H2U0z0R2y1~0,1#0h1:0F0u0D8k0u0q0h0H1T0O8e7U7k6z2x7W7Y0P5{7#7-5N7/437+7B7v6L8D1X7=6~247^7K7L1?0T0w0h1}0r0h4d0!800Q2q0T0;1~890J0h0O300Y0/0Q1$0%0h2C0K0A0b0T1$1#8x2=3Q8B7q4o6H7$8M564p8K8G5%7/696V7?8S7Q8U6O0b0D0A8m8o8l8n0V946v969b7X980P4G4Q7W7(7/4G9f7%7.5m9F9k8R1)8T7`0h7S019y6e9A6J8C4X9G9B9I5m4X9L9c5O9%3M9U793t708q0N7c8y787H010b0{0C779?0?6`0Ga39~0K7ba89l1)6`0Mac9R0?a0040oah739@04719|a4010Q5D039p9r9t8p1!aA3888288.8a9Y7l9!7C8C4?9(9g7w0P4?9-7D5OaO3M7j954v971~3G58aP9M8H5m58aU9*a(8P3m9=9~av0{ax0 1v0T2y0F0,8486280z0,2zar4t7V9B8C5q9aaQ8Nbda/9N5B5o2Ja?7`ataa040Tan3Raka2as9~0U0T0{5r8yaZ9za#bb9D5Cbea+9h5mbJbia,5B6U5-a@ad0?6Y040B1P93bxbV3S6/bt5eak020j0z0fb*5;0q0{2j7N6_0{6|8ybp9^0qb_4}7fb;4}0b7J1~0!c47a049{2:9}b%b,0lb/caap1Z9`c1740{a7b}a9b)b$ai9 0{amcvao0?bz5pcoae0{0M7hcA3Ra_04axa~2U0g0w0r910D8#8:0/811c1D0FcVa aB0p8scm300P3j8f8{308vcT2E0F87890 0YcScUcWaB0Ga~0o0v0Mc*b2c`0h8:8=2y8+0z0FaJ8z0ha$0K5B7s309Hbj6M7y6Pbf6T7Fbn9U7Mctaq9_cdbFcwa6cF3@cua!dFcHckaja1dNb(dB0qcncsb%dGdVcwbqbsdYcBcxaldH01cD5Ed*af770hbE9ZbG9#bI7!do9)dq3g7*dtbLaR5)a=9obUdZb dUdKd%dXea4wdJdEd%akczed5ed,3kd$7edMcKb+dPer5;abbDbad^a%6M8Ed{du5`22e09.7/0v8EbTdydzb%d!dQbvdQeQeuc5cydQem77d=aKd@aMbI9jeDe1bg9eeHaVeJ9jeMeOcwbX2C0zcV1deVcbc,dh1e6y6f6t6h6q1e0z6kf82P2K8q1#2J6i7j0$0(0*0O04.
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.
.128013oIP;f 8lkg5:jN+,bry2a1éh3tvw=u6e[(Sà n9]_s-c)7im./4p0d050#0G0A0v0U0i0P0g0R0i0v0P0P0D010A0U0Z010406050P0E0V0V0v0s0t040J0b0i0E0_0b0L050X101214160~0Z04051m1f1p0X1m0~0#0U0B0.0:0=0@0:0L0k0E0v0k0G0Q0Z0t0A0y1d0g0y0U0k0y0i1R0y0A0|050)0r0i0G1y0;0?011Q1S1U1S0A1!1$1Y0A0s1n1M0.190P0Z0v0L0@0u011(1A010f0+0G0L0v0V0G1Y1}1 241*271$2a2c0|0a0g0d0s0b0Z0b0P0U1c0L0g0%1{0s0s0G0R2x1f2f0L1n0X1M2K1@1_1^1Z0#2h1B0U0L292u1Y1v1x0/1)2U2W0L0b2!1Y0Z2D1n2I2K2;0 1~2y2$252*0s130i1Y0v1P2D0f0@030O0O0R2+0G1U2)0b0Q0w3f0|0g0w1f0v2=2^0}2@2g2`1*2|2~30320G340136383a3c2X3f0Q22040g0u3l3n1 3p2I2T013u0v2 1n310y333537390%3E2*3G0z3i0z3M2H3o0~3Q3s0@3T3V053X3Z3A3#3D2V3F3g0Y3i0Y3.1g3:3q2_1z3t0b2}3U3w3Y3y3!3C3%403)3g0l3i0l462;3;2^3R3^4g3|3B3$3b4m3e3g0F3i0F4s483=4b3@4d3v3W3x3z4A3 3d3G0T3i0T4J3O4u3r4M3S4O4f4Q4h4S3~4l4V3g0h3i0h4!2J4$4a2%4)4e3_3{4i3}4k4C4;0Q0M3i0M4_3P4v3?4~4P3`4R4j4B3(4E3f0!0|0w0!5b4{4w4*505i535k4D3G0w0w5p3k0X3m3/4#495u4 4y524T4:413f3I0w3L5G3N4`5K5e4x4,4z4/555R0w3+045+5s5Z4(5#5h4-5j4U5*435-455W5I2J1q2/1f2!2N0#1_2S5e4B2Z1w1n2.0G2:3o5 1n4B6g2g0U0#0@372I5B3w6n6p545l6s0g2l0G6v5z565D2K5H4L4}0j0|0%0f6i5:4}0C3i6O6I2{0f0|0R0y0G0s6Y6!6T5d4(0{040I6(4%4}0L0|1!6.4|256+0q6i0g6P2{0|1e473O6~1*6+0S0m6i0~72603Q6u016q2^3G3I5h7e5(6x3g226z2b6B7f6w5A7o1Y5W0g7z6}6U3t0|0U6|740@0b0|0D7G7C0@0V0U0|5r7b3J7H010R6F030g0c0L2w0U3U0U0P0v2x2z1%0U0g0v0E0g6e7P6!0g0x0i0x2c0L0A7.0g6?7T7a2?7d6o7t6r3g5,7k897m7v0Q3+7q2c6C5_4n8i7x3m7A7B6)6:0|0n7M8u257J047L7T8t6/8A0|0W8J8y8G1*7X0|7Z7#7%7)7+7-2A0n7;7?0%0s7$7`7|7~29812A844t6@0g7l0O8b0Q5{8e8m5Q8o438k7s8g568^7y7A7V6K040C1Q1$8L6^7D048x8E7V8B020k0A0e8D2;8F9c3@7E8/5e6+789g7N7W7Y7!0i0g2D0P0A1%7=0g0V0b2V0-0E2y8(7 810K0g0B0x0s0U276%858/8;8?4p4Q8;6D5R4p8~8`5)8o9)3M866h886v8?4G9*8f7u564G9/7t9,8o9}3M8s8s7V6;040V9b3R8B9n3o9p3R6+6-7Tab9s9x8z1*8B0paf5!8w9t6*0|0Saw4(8B0X0XaD4}7P0|5V9o7V8O047Z2V1v0R1%7P1U0G7?8*2D8:0g0(0g9f8.ao9`8a7h3g4X9~9:7n0Q4Xa3905Ra;a8a97z957E6Nar8M9r048-9_as0@6+0Haz8vadbe6_0|0NaI8H8Cai3Oakax047187ba019vbl8N9A2y310x0A0x832r0E9V799$9 8?4?a=a48n5m4?a`a05RbOa~a aa9y962D0A0E8#byb6ae9#a,4v9%a/576t9 a55m58bUb_3G586G3JbZb1049Yb+3S6=0v0rbh750|bdb/b5c7bgcf9qbwbjc69i0i9lc6acbtb9cgbxb4ckaP7Z2y0L000G9F7@0;2z1 0-0:cG0s0_1%0k7=6$82cL1U9F0GbKcj8:bMb=5qb@a?8hc%b|bR5B5oc0bZa9apc4cn7Kcr0|b-aN9yauc6aK5-cYbu6mc#1 5B6F8_bQ8{5m5C236Ac)6Ed993a c33b0PcXcZ9u0|9wc}bvcz6z6zcDcF1~0-0#cJ0gcL1~cN0U1%0#2r2wdK1%cU7*9Gd3cu2yb;d73g5Uc(db9;dd7pdgd#a@dZc:c;949yaca*aj9hc_cx4wc{c^040Qd07Qd2b.d4dVd60L5B8d319+c-dY8jd)a{8o5+8q3pcZdWe6dY8^e9b^eb3f8}eebVeg928rd/bvb$0(b)ctbp950R0|0o1ddpa+2?0X6k616f636c1f0A66eU2Q2Lc91$2K647a0%0)0+0P04.
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)