let tri_tas ineq t = let echanger i j = let k = t.(i) in t.(i) <- t.(j); t.(j) <- k; in let rec entasser n i = let g = 2*i+1 and d = 2*i+2 in let max = if g < n && ineq t.(i) t.(g) then g else i in let max = if d < n && ineq t.(max) t.(d) then d else max in if max <> i then ( echanger i max; entasser n max; ); in let n = vect_length t in for i = n /2 -1 downto 0 do entasser n i; done; for i = n-1 downto 1 do echanger i 0; entasser i 0; done; ;; let tri_c = tri_tas (prefix <) ;; let tri_d = tri_tas (prefix >) ;;