Tableau de 0 et 1

On considère un tableau 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 :

📋 Texte
debut de zone            fin de zone
    non triée            non triée
           │              │
           ▼              ▼
┌─────────┬────────────────┬─────────┐
│ 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
>>> tab_1= [0, 1, 0, 1, 0, 1, 0]
>>> separe(tab_1)
>>> tab_1
[0, 0, 0, 0, 1, 1, 1]
>>> tab_2 = [1, 1, 1, 0, 0, 0]
>>> separe(tab_2)
>>> tab_2
[0, 0, 0, 1, 1, 1]
Contrainte

On interdit d'utiliser la méthode de tri sort et la fonction de tri native 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 : 10/10
.128013fe)à61ipmzSvk(q5rxNOd;Po/aR lé+[C8Ly7_3:-tg.?=swc,è]hD2nb094u050v0c0Q0A0h0D0V0C0X0D0A0V0V0U010Q0h0i010406050V0-0j0j0A0r0K040l0y0D0-110y0(0C020A0j0i0w0C0B0c1b0r0p0-0c0V050z181a1c1e160i04051J1C1M0z1J160v0h0m0_0{0}0 0#0h0R0#0D1!0#0Q14050;0)0D0c1V0|0~011Z1#1%1#0Q1-1/1+0Q0r1K0Q0#0_1h0V0i0A0(0 0%011;1X010b0?0c0(1p0c1+27292e1?2h1/2k0j2m040a0C0x0r0y0i0y0V0h1k1m0/250r0r0c0X2H1C2o0(1K0z232T2022211,0v2q0 1%0(2j2E1+1S1U0`1=2%0h2)0(0y2-1+0i2M1K2R2T2~17281m2/2f2@0r1b0D140C0g2Q3215312p341?36383a0%3d293f2R2$013k0A39040C0N3o2S163r3i0 3u3w0C0,3A3q323s3G3a0q3K3C3M3E3t0y373v3a0f3R3g331W3j3W3l3x0L3#3D3(3F3*3Y3x0I3.3T3:3V3X3H0+3_3h3{3O040g0*403%2:3|3+0g3c1D3e1N2|1C2-2W0v222#3U0X2^2w0.1T1K2{0c2}4f4e3p054p0/4x41490n140/0b3K3$3s0W3a4L3/490(0b140V0c282M4Q3`4913040o4!4F35140k0c2B0V0M0:0M0-0(1B4z2S4M3U4%0d0O474N3a0C554*482f0V0v14021y0y0Q0w5d0-5f5h5e5g0i0{0X1:0Q0y0-0^1/0^0*0C2J4.4:4=0Q4@4_0C0e0C0R0A0-0X0#1:0:0C5s5u0C5w3b5H5z2B2G0c5i5k5$5g5(0w3R55564R4,040/0)1j3K0C4}3{0y140U5^5`490j0h14464{3x5_5/1?0X0g14030C2=1S5q5z1:0v0E5?0Q5,5-605:2h0(5 690 5|045~66684#350)142t573s4%4)666r3j4-4/2E5D5F4`306w014 6v6D1?6y0P6Z4+1?62144d2~5.6!0 6b6d6f0(6h6k1:6t6p6/6)0 4H040W1Z1/6(586O5;0c6n763s6y020D5g7c3U0(146|6M6W4%5166065-7t6C6 01710h4K6B6N3F6P5C4?4^6U4f7o140G6I7j4I7a5@7n6:6X140!7i5{5}6A6.7C016+04656V7T7p6}7u7t7$7k797b7B6W6y7!3e7v777D7?7R7#7_140F7X6163447.7:6W710c0@0c7N3{7-7r7/7/7;7E6R7G4_8h4$7L8s5:5=817J7,7V862f7`8C785B8p5E7H8v1?4%7M7S7w7=7m7+7w4%7W8k8l8b7T7=8H4;8q7I4A7K048O8T7~3t7l2=8L0 8V8F6x5}8_7%886-3e7s8Y6q6W8R8=7^7T8E978Q8;6u9a8/6$8|7(8 3p160z4C4w4g9o0z4j1C0Q4l9t2Z2U0A1.9q4j1I4E8/2M0j0M0b0A0n0c0M0#0N141u1w1y1A0C7q301P3f2-3s0A0v0j1l2G0h1l6@0b6y1I9#9%9)2H0P110Q1~3x0x0|5U0A0C0i0c2=6k000E5N290R4/1N3f1J0t3=1/2v0(0Qa15t0r0Ca70#a94/0C0%0C0m3v0c0-0r0^0v290^4^5R9z1/5L0Y6f0D0C9J1jaN0=2M3y060A0b0b2N0;2H0^0o5t0C4^1:aVaX2O0A2H5z5t9A5_9n040AaK0)0C0U0C0)aK0A1Ca@0d0S5_9Y9D0$aD0C2@201:0X0|aK0i0-0h0V1y009,0V0=ak9T5U5raH0c5Lbbbe1l112jbr1z6j5x0Ca%0/0V060gaKaC5G1/a?4q048e4Wb2bSbH1mbp2G0Cbm0?0C0V000A0Rb#0v00aF0gb50u1ma2aP0v1l0Xb)1:280}as0/060Da6a80(aa0C5Q9J0haS4^0h9Taiak0/0-0s0Ca+aYa.9+5G7q1Q1L1K9!3U1^1$1(1*9E3s2s2j2l142y0l0X0r12ak0x0K231l4L4v9E2 4fa@8Y7$6y0Sc$8a937T8d8f8?7U049W9092c)9b048$6S8K8P8/8Nc-7=8x6oc|6J8B9e7d8{d67Oc^6Q8%8J8rd34~8udg429cc-8^8Xc=8ndb7Fde8)4|8+8-8zc@8Sdyc}d58298d8dE7w9ic(6~9f14c$0S3#9mbS9p2T9Cbx1%ay6j9Vac1R1T3scz1`1)2n7TcF2u2wcJcLcN2zcQ0#cS6McU3$cW4AcY8lc!dNc%do7u7$c+bVdj8tc/dKe69414aw1/az8|99dH8/8#dcc`df8.d48,c 7P7@esdh048W2~91dpefdr8I6Tdmdieydk80d2eLebeB7|e26z8|eodseIea2fc~eZ78dA8*8AeAed8Zc@c_8(eJeue$7 e(dve*eR3p7}d7eUd9eMehay0redeTdOdQa@dT4i4t9l9C4s2.3{9$9(0(9*9,2=9.149:3Ufi9?cr9^2G9{0C0H0y1q0Qas0Td#cvb@a1ayak4pfBas5V5y5Qa7cMaSbQ0)9,2@0j0)aS2JfPcj1:0gcn2{0Z0V0S069}an4paj2MaK5q0{bba71A2FfCdZccaSau4Y4pazaB0-aG9A5Lb50J0c064v62as2Daz25fManfOcaakbQck0s0h0Z2valgk9(1S2hfN9Uf2g6dPb7fb0m3f9r0:0=0@04.