Aller au contenu

Tri d'un tableau de 0 et de 1⚓︎

On considère un tableau zeros_et_uns d'entiers dont la valeur peut être soit 0 soit 1. On se propose de trier ce tableau selon l'algorithme suivant : à chaque étape du tri, le tableau est constitué de trois zones consécutives, la première ne contenant que des 0, la seconde n'étant pas triée et la dernière ne contenant que des 1.

Ci-dessous un schéma de la situation pendant le processus de séparation des 0 et des 1 :

Text Only
debut de zone            fin de zone
    non triée            non triée
           |              |
           v              v
 ------------------------------------
| 0 ... 0 | zone non triée | 1 ... 1 |
 ------------------------------------

Tant que la zone non triée n'est pas réduite à un seul élément, on regarde son premier élément :

  • si cet élément vaut 0, on considère qu'il appartient désormais à la zone ne contenant que des 0 ;
  • si cet élément vaut 1, il est échangé avec le dernier élément de la zone non triée et on considère alors qu'il appartient à la zone ne contenant que des 1.

Dans tous les cas, la longueur de la zone non triée diminue de 1.

La fonction separe prend en paramètre un tableau zeros_et_uns dont les éléments sont des 0 et 1 et renvoie le tableau trié en procédant comme décrit ci-dessus.

Exemples

Python Console Session
>>> zeros_et_uns_1 = [0, 1, 0, 1, 0, 1, 0]
>>> separe(zeros_et_uns_1)
>>> zeros_et_uns_1
[0, 0, 0, 0, 1, 1, 1]
Python Console Session
>>> zeros_et_uns_2 = [1, 1, 1, 0, 0, 0]
>>> separe(zeros_et_uns_2)
>>> zeros_et_uns_2
[0, 0, 0, 1, 1, 1]

Attention

Dans cet exercice, il est interdit d'utiliser sort ou sorted

Compléter la fonction separe

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

.128013nur9àw6cs _1pk(d[3tv0oé2=il:;7e8fzSb4/-+gy5]mPh)a050q0F0t0X0A0B0j0k0i0B0X0j0j0z010t0A0n010406050j0c0T0T0X0d0Q040J0w0B0c0=0w0b050M0|0~10120`0n04051i1b1l0M1i0`0q0A0u0*0,0.0:0,0b0P0c0X0P0F0N0n0Q0t0V190k0V0A0P0V0B1N0V0t0^050#0K0B0F1u0-0/011M1O1Q1O0t1W1Y1U0t0d1j1I0*150j0n0X0b0:0y011!1w010H0%0F0b0X0T0F1U1_1{201$231Y26280^0a0k0U0d0w0n0w0j0A180b0k0Z1@0d0d0F0i2t1b2b0b1j0M1I2G1:1=1;1V0q2d1x0A0b252q1U1r1t0+1#2Q2S0b0w2W1U0n2z1j2E2G2-0{1`2u2Y212$0d0 0B1U0X1L2z0H0:030l0l0i2%0F1Q2#0w0N0s0N0m0^0k0m1b0X2.2;0_2:2c2?1$2^2`2|2~0F3001323436382T3b0N1~040k0y3i3k1{3m2E2P013r0X2{1j2}0V2 3133350Z3B2$3D0s3f0s3J2D3l0`3N3p0:3Q3S053U3W3x3Y3A2R3C3c0L3f0L3+1c3-3n2=1v3q0w2_3R3t3V3v3X3z3!3}3$3c0R3f0R432-3.2;3O3=4d3_3y3Z374j3a3c0h3f0h4p453/483;4a3s3T3u3w4x3|393D0E3f0E4G3L4r3o4J3P4L4c4N4e4P3{4i4S3c0G3f0G4X2F4Z472Z4$4b3?3^4f3`4h4z4.0N0e3f0e4?3M4s3:4{4M3@4O4g4y3#4B3d0v0^0m0v584^4t4%4}5f505h4A3D0m3e045z5p465r4|4v4 4Q4-3~3d3F0m3I0M3j3,3L1m2+1b2W2J0q1=2O5b4y2V1s1j2*0F2,3l5S2F054y5-2c0A0q0:332E5y3t5^5`515i5}0k2h0F605w535A3+4I4`0o0^0Z0H5/5?4_210g3f6i5E5b0b0H0^0j0F1`2z6o6c210@040p6y5a4#0b0^0I0F2n0j0l0!0l0c0b0j6E4!4`6B0W0C6i0`445T3N5 015{2;3D3F5e6(4,525L1~6427666)615x3c6-5Q6j3O6m3G0k746T6k1$0j0q0^017c0n0,0i1Z0t0w0c0)1Y0)0v2v1Z6J6L6N0t6P6R0k0f0k0P0X0c0i0V1Z0!0k7i7k0k7m3g7x2v2n2s297c6Z760k6/0l5|3c3(4N7W685L3(6@28674R7(1U6 74756z3q6f0F0K176i0k6p4#0w0^0z7|7~4`0T0A0^5o6#2F7=6F4`0i5A037V0b1r7g7p2v0x7`0t7T8a707W7Y0N407#5_6`7%4k8w1 657,5K8C8x3J7;7}7?3;0^231a8s8M8d218004828S842@0K0^2g7U5b6B6D8s8!7@047r2q7t7v6S8-8N016W838`8W0N8}8U1$865m7|7;8.0:8f0^8h2R8k1Z2w8Q8r2/6%8z6*1{3D4m8y8G6;8C4m7*6_6:624l7/3j8L98016e040g1M1Y916U2@7^8p9K770:8W020B0t0D9P4t8P2R8)4#6B6Y8s6!9j4s8u6+4C5~9l6{534D9v9r9y0N4D2G9B8L978`9F0A6h8Z8`6H8:6K8=6O6Q8^9+9L1$6B0r9#4`a70Z9O8_920:6B0S9X5b8W0z8Y2-8Taf0:940489ae9Q8{0^9(4q7U9-9n3c4U9q8A7-8C4U9^aR8H5jaP8K9 a#9Dal7_7{a5ap01avat6G9Na*ay9D8W0Oa/85875B9i5.9k608v4:aQ9x6|0N4:aVb553b3a!a$a10^376uaj6AaIa~6$9,9;8v55b49=5L55b9bt8Cbrbda#a0a,a70u3R0F0c0da`8V81bK8/8;6Mab6Rbjag0^aiaoaA3P9Z8RaF3Oarbm5:b06`8v5n9:9_b6b.bw8B5jb.9}73bBbCbYa7bP8?acbTaqbVc3bZ049hbXaGb(a+bYa.cdaGb a9bQ7uc2cab%c5cn6qa;8qcq9$0^as9)aLbp9.3d6a2}7$aSb^3eb?cG5y6a7:b|b}ch6Icjc1bScu6Vcpb$cr04ama=a a,cca?8~bMcg9Y04bF1YbIb)8tcAaN5Mb/aW9sb^6?8Fc|9`5O9Ab{cOa%b!bN9Rc,c*bDd8c-au0^90df4#aC3hcy8-0M5=5U5,5W5)1b0t5Zdv2M2H0X1Xds0M5X6!0Z0#0%0j04.