Advertisement
Guest User

mergesort

a guest
Feb 13th, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.50 KB | None | 0 0
  1. let rec mergeSort f xs =
  2.   let rec _sort left right res =
  3.     match (left, right) with
  4.     | ([], []) -> (res |> List.rev)
  5.     | (ls, []) -> (res |> List.rev) @ ls
  6.     | ([], rs) -> (res |> List.rev) @ rs
  7.     | (l :: ls, r :: rs) ->
  8.       if (f l r) then
  9.         _sort ls right (l :: res)
  10.       else
  11.         _sort left (rs) (r :: res)
  12.  
  13.   match xs with
  14.   | []  -> xs
  15.   | [x] -> xs
  16.   | _ ->
  17.     let (ls, rs) = splitAt ((xs |> List.length) / 2) xs
  18.     _sort (mergeSort f ls) (mergeSort f rs) []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement