Code source tri "Shell"
let tri_shell tableau=
let longueur=Array.length(tableau) and n=ref(0) in
while (!n<longueur) do
n:=3*(!n)+1
done;
while (!n<>0) do
n:=(!n/3);
for i=(!n) to (longueur-1) do
let memoire=tableau.(i) and j=ref(i) in
while ( !j>(!n-1) && tableau.((!j)-(!n))>memoire ) do
tableau.(!j)<-tableau.((!j)-(!n));
j:=(!j)-(!n)
done;
tableau.(!j)<-memoire;
done
done;;
(* val tri_shell : 'a array -> unit = <fun> *)