Advertisement
Guest User

Untitled

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