Advertisement
Guest User

Untitled

a guest
Jun 28th, 2015
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.50 KB | None | 0 0
  1. let print_pair c =
  2.     let (a, b) = c in
  3.     print_int a;
  4.     print_string "-";
  5.     print_int b
  6. in
  7. let print_tab f tab =
  8.     for i = 0 to (Array.length tab) - 1 do
  9.         f tab.(i);
  10.         print_string "  "
  11.     done
  12. in
  13. let merge_sorting f lt rt =
  14.     let ll = Array.length lt in
  15.     let lr = Array.length rt in
  16.     let l = ll + lr in
  17.     let ret = Array.make (l) 0 in
  18.     let li = ref 0 in
  19.     let ri = ref 0 in
  20.     while (!li < ll && !ri < lr) do
  21.         if ((f lt.(!li) rt.(!ri)) < 0) then
  22.         (
  23.             ret.(!li + !ri) <- rt.(!ri);
  24.             ri := !ri + 1
  25.         )
  26.         else
  27.         (
  28.             ret.(!li + !ri) <- lt.(!li);
  29.             li := !li + 1
  30.         )
  31.     done;
  32.     while (!li < ll) do
  33.         ret.(!li + !ri) <- lt.(!li);
  34.         li := !li + 1
  35.     done;
  36.     while (!ri < lr) do
  37.         ret.(!ri + !li) <- rt.(!ri);
  38.         ri := !ri + 1
  39.     done;
  40.     ret
  41. in
  42. let rec merge_sort f tab =
  43.     let l = Array.length tab in
  44.     if (l < 2) then tab else
  45.     (
  46.         let hl = Array.sub tab 0 (l / 2) in
  47.         let hr = Array.sub tab (l/2) (l - l/2) in
  48.         let sl = merge_sort f hl in
  49.         let sr = merge_sort f hr in
  50.         merge_sorting f sl sr
  51.     )
  52. in
  53. let int_cmp a b = b - a in
  54. let pair_cmp a b =
  55.     let (ax, ay) = a in
  56.     let (bx, by) = b in
  57.     let c = int_cmp ax bx in
  58.     if (c <> 0) then c
  59.     else (int_cmp ay by)
  60. in
  61. let t = (merge_sort pair_cmp [|(2, 7);(3,5);(6,2);(4,1);(1, 0);(79, 3);(4, -2)|]) in
  62. print_tab print_pair t;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement