1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
   |  
procedure separe (l, l1, l2 : liste);
var l3, l4 : Liste;
  debut
    vide(l3);
    vide(l4);
    tant que (l <> NIL) et (l^.suiv <> NIL) faire
      debut
      queue(l, l1, l3);
      queue(l, l2, l4);
      fin
    si l <> NIL alors
      queue(l, l1, l3);
  fin
 
 procedure fusion (var l, l3, l4 : Liste);
 var  l5 : Liste; 
  debut
    vide(l5);
    tq (l3 <> NIL) et (l4 <> NIL) faire
      si infegal(l3^.val, l4^.val) alors
        queue(l3, l, l5)
      sinon
        queue(l4, l, l5);
 
    si l3 <> NIL alors
      debut
      concat(l, l3);
      l := l3;
      l3 := NIL;
      fin
    sinon
      debut
      concat(l, l4);
      l := l4;
      l4 := NIL;
      fin
  fin
 
procedure tri (var l : Liste);
var l3, l4 : Liste;
debut
  si (l <> NIL) alors
    debut
    separe(l, l3, l4);
    tri(l3);
    tri(l4);
    fusion(l, l3, l4);
   fin
fin | 
Partager