Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let split l =
- let rec split l left right =
- match l, right with
- | [], _ -> List.rev left, right
- | [_], _ -> List.rev left, right
- | _::_::t, h::right_t -> split t (h::left) right_t
- | _ -> failwith "Error"
- in
- split l [] l
- let rec rev_add a b =
- match a with
- | [] -> b
- | h::t -> rev_add t (h::b)
- let merge cmp left right =
- let rec merge cmp left right acc =
- match left, right with
- | [], l -> rev_add acc l
- | l, [] -> rev_add acc l
- | left_h::left_t, right_h::right_t ->
- if cmp right_h left_h then
- merge cmp left right_t (right_h::acc)
- else
- merge cmp left_t right (left_h::acc)
- in
- merge cmp left right []
- let rec merge_sort cmp l =
- match split l with
- | [], h1 -> h1
- | l1, l2 -> merge cmp (merge_sort cmp l1) (merge_sort cmp l2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement