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
.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.

###(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
.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.