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
.128013snc)wuql3 (è;ébokp/h1t?à[,aRPmy7]f4OL_2D96ev-z8x+dCiSg:5=N.0r050Y0R0w0B0!0i0b0k0d0i0B0b0b0)010w0!0s010406050b0g0E0E0B0-0F040#0q0i0g110q0c0k020B0E0s0n0k0C0R1b0-0h0g0R0b050t181a1c1e160s041C1J051M0t1M1O1J160Y0!0S0_0{0}0 0u0!0$0u0i1$0u0w14050;0p0i0R1X0|0~011#1%1)1%0w1/1;1-0w0p0q0Y1e1.0-1K0w0u0_1h0b0s0B0c0 0N011?1Z010I0?0R0c1p0R1-2e2g2l1^2o1;2r0E2t040a0k0D0-0q0s0q0b0!1k1m0/2c0-0-0R0d2O1C2v0c1K0t2a2!0w2827290Y2x0 1)0c2q2L1-1U1W0`1@2.0!2:0c241V1-0s2T1K2Y2!35172f1m2_2m2~0-1b0i140k0v2X3915382w3b1^3d3f3h0N3k2g3m2Y2-013r0B3g040k0j3v2Z163y3p0 3B3D0k0J3H3x393z3N3h0(3R3J3T3L3A0q3e3C3h0Q3Y3n3a1Y3q3%3s3E0G3,3K3/3M3;3)3E0V3^3!3`3$3(3O0P403o423V040v0,473.2`433=0v3j1D3l1L331C2@2%0Y2+3z0d242D0.1V1K320R344m4l3w054v0/4D484g0r140/0I3R3-3z0f3h4R3_4g0c0I140b0R2f2T4W414g13040l4*4L3c140U0R2I0b0M0:0M0g0c1B4F2Z4S3#4-0e0%4e4T3h0k5b4:4f2m0b0Y14015j0s0{0d1=0w0q0g0^1;0^0,0k2Q4@4_4{0w4}4 0k0y0k0$0B0g0d0u1=0:0k5p5r0k5t3i5E5w2I2N2t5j3Y5b5c4X4=040/0p1j3R0k53420q140)5-5/4g0E0!144d513E5.5%1^0d0v14030k2|1U5n5w1=0Y0o5+0w5!5#5^5(2o0c5@610 5;045?5~604+3c0p142A5d3z4-4/5~6j3q4?4^2L5A5C50376o01556n6v1^6q0T6R4;1^5`144k355$6S0 6365670c696c1=6l6h6%6X0 4N040f1#1;6W5e6G5)0R6f6~3z6q020i0w0n743#0c146;6E6O4-575~065#7m6u6@016_0!4Q6t6F3M6H5z4|4~6M4m7h140z6A7c4O725,7g6(6P140H7b5:5=6s6$7v016Z045}6N7M7i6=7n7m7V7d71737u6O6q7T3l7o6 7w7,7K7U7/140X7Q5_5{4b7%7)6O6_0R0@0R7G427$7k7(7(7*7x6J7z4 8a4,7E8l5(5*7`7C7#7O7 2m7:8v705y8i5B7A8o1^4-7F7L7p7+7f7!7p4-7P8d8e847M7+8A4`8j7B4G7D048H8M7@3A7e2|8E0 8O8y6p5=8/7W816#3l7l8R6i6O8K8+7.7M8x908J8*6m938(6U8=7X8^3w160t4I4C4n9h0t4q1C0w4s9m2)2#23252%0B1:9j4q1I4K8(2T0E0M0I0B0r0R0M0u0j141u1w1y1A0k7j371P3m2@3z0B0Y0E1l2N0!1l6,0I6q1I9X9Z9#2O0T110w203E0D0|5R0B0k0s0R2|6c000o5K2g0$4^1L3m1J0*3|1;2C0c0w9}5q0-0ka30ua54^0k0N0k0S3C0R0g0-0^0Y2g0^4~5O9v1;5I0A670i0k9F1jaJ0=2T3F060B0I0I2U0;2O0^0l5q0k4~1=aRaT2V0B2O5w5q9w5.9g040BaG0p0k0)0k0paG0B1Ca:0e0+5.9U9z0Oaz0k2~2(1=0d0|aG0s0g0!0b1y009(0b0=ag9P5R5oaD0R5Ib7ba1l112qbn1z6b5u0kaZ0/0b060vaGay5D1;a/4w04874$a~bObD1mbl2N0kbi0?0k0b000B0$bX0Y00aB0vb10K1m9~aL0Y1l0db#1=2f0}ao0/060ia2a40ca60k5N9F0!aO4~0!9Paeag0/0g0W0ka%aUa*9%5D7j1S1N2!1M9W3#1`1(1*1,9A3z2z2q2s142F0#0d0-12ag0D0F2a1l4R4B9A364ma:8R7V6q0+cZ838|7M86888,7N049S8_8{c$94048V6K8D8I8(8Gc*7+8q6gc_6B8u97758;d37Hc=6I8W8C8kd0548ndd4995c*8.8Qc/8gd87ydb8Y528!8$8sc;8Ldvc`d27{91d5dB7p9bc#6?9814cZ0+3,9fbO9i2!9ybt1)au6b9Rcra81T1V3zcw1|1+2u7McC2B2DcGcIcK2GcN0ucP6EcR3-cT4GcV8ecXdKc!dl7n7Vc(bRdg8mc,dHe48}14as1;av8=92dE8(8Ud9c@dc8%d18#c|7I7-eqde048P358`dmeddo8B6Ldjdfewdh7_c eJe9ez7=e06r8=emdpeGe82mc{eX70dx8Z8teyeb8Sc;c?8XeHese!7^e$dse(eP3w7?d4eSd6eKefau0-ebeRdLdNa:dQ4p4z9e9y4y2^429Y9!0c9$9(2|9*149,3#fg9/cn9;2N9@0k0Z0q1q0wao0xdZcrb:9}auag4vfzao5S5v5Na3cJaObM231m2~0E0paO2QfNcf1=0vcj320m0b0+069_aj4vaf2TaG5n0{b7a31A2MfAdWc8aOaq4(4vavax0gaC9w5Ib10L0R064B5`ao2Kav2cfKajfMc6agbMcg0W0!0m2Cahgi9!1U2ofL9Qf0g4dMb3f90S3m9k0:0=0@04.