diff --git a/lessons/tris/stack_sort_pseudocode.txt b/lessons/tris/stack_sort_pseudocode.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fde2e0c9026fd523b1c1e7e31f71970548515bfe
--- /dev/null
+++ b/lessons/tris/stack_sort_pseudocode.txt
@@ -0,0 +1,37 @@
+type Array_Int; // type tableau d'entiers à 1 dimension
+type Pile_Int; // type pile d'entiers
+
+// Retourne "a < b" si <op> = "<", "a >= b" si <op> = ">=", 
+// "true" si <op> = "" et "false" sinon
+function condition(a,b : Integer; op : String) return Boolean;
+
+// Transfère les éléments de <pile_1> à <pile_2> 
+// tant que condition(sommet(pile_1),val,op) est vrai
+procedure transfert(pile_1, pile_2 : Pile_Int; 
+                    val: Integer; op : String);
+
+// Trie à l'aide de 2 piles
+procedure trier(tab : Array_Int)
+   pile_g,pile_d : Pile_Int;
+begin
+   // parcourt le tableau <tab>
+   for i in 0..tab.length loop
+      // transfère les éléments de <pile_g> à <pile_d> 
+      // tant que sommet(pile_g) < tab[i]
+      transfert(pile_g,pile_d,tab[i],"<");
+      // transfère les éléments de <pile_d> à <pile_g> 
+      // tant que sommet(pile_d) >= tab[i]
+      transfert(pile_d,pile_g,tab[i],">=");
+      // empile l'élément <tab[i]> dans <pile_g>
+      empiler(pile_g,tab[i]);
+   end loop;
+
+   // transfère tous les éléments de <pile_d> à <pile_g>
+   transfert(pile_d,pile_g,0,"");
+
+   // transfère tous les éléments de <pile_g> dans <tab>
+   for i in 0..tab.length loop
+      depiler(pile_g,tab[i]);
+   end loop;      
+end Trier;
+