Advertisement
Guest User

Untitled

a guest
Dec 19th, 2013
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.87 KB | None | 0 0
  1. (* ocamlopt unix.cmxa -unsafe heap.ml -o heap *)
  2.  
  3. let _ =
  4.   let n = 10_000_000 in
  5.   let h = Array.init n (fun i -> i) in
  6.   let push_down pos n =
  7.     let pos = ref pos in
  8.       while 2 * !pos + 1 < n do
  9.         let j = 2 * !pos + 1 in
  10.     let j =
  11.           if j + 1 < n && h.(j + 1) > h.(j)
  12.           then j + 1
  13.       else j
  14.     in
  15.           if h.(!pos) >= h.(j)
  16.       then pos := n
  17.           else (
  18.         let tmp = h.(!pos) in
  19.           h.(!pos) <- h.(j);
  20.           h.(j) <- tmp;
  21.               pos := j;
  22.       )
  23.       done
  24.   in
  25.   let start = Unix.gettimeofday () in
  26.     for i = n / 2 downto 0 do
  27.       push_down i n
  28.     done;
  29.     for i = n - 1 downto 1 do
  30.        let tmp = h.(0) in
  31.      h.(0) <- h.(i);
  32.      h.(i) <- tmp;
  33.      push_down 0 i;
  34.     done;
  35.     for i = 0 to n - 1 do
  36.       assert (h.(i) = i)
  37.     done;
  38.     Printf.printf "Done in %f\n" (Unix.gettimeofday () -. start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement