let rec split = function
  | [] -> [], []
  | x :: r -> let l1,l2 = split r in x :: l2, l1

let rec fusion = function
  | [], l | l, [] -> l
  | x1 :: r1, (x2 :: _ as l2) when x1 <= x2 -> x1 :: fusion (r1, l2)
  | l1, x2 :: r2 -> x2 :: fusion (l1, r2)

let rec mergesort = function
  | [] | [_] as l -> l
  | l -> let l1,l2 = split l in fusion (mergesort l1, mergesort l2)


This document was generated using caml2html