Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let print_pair c =
- let (a, b) = c in
- print_int a;
- print_string "-";
- print_int b
- in
- let print_tab f tab =
- for i = 0 to (Array.length tab) - 1 do
- f tab.(i);
- print_string " "
- done
- in
- let merge_sorting f lt rt =
- let ll = Array.length lt in
- let lr = Array.length rt in
- let l = ll + lr in
- let ret = Array.make (l) 0 in
- let li = ref 0 in
- let ri = ref 0 in
- while (!li < ll && !ri < lr) do
- if ((f lt.(!li) rt.(!ri)) < 0) then
- (
- ret.(!li + !ri) <- rt.(!ri);
- ri := !ri + 1
- )
- else
- (
- ret.(!li + !ri) <- lt.(!li);
- li := !li + 1
- )
- done;
- while (!li < ll) do
- ret.(!li + !ri) <- lt.(!li);
- li := !li + 1
- done;
- while (!ri < lr) do
- ret.(!ri + !li) <- rt.(!ri);
- ri := !ri + 1
- done;
- ret
- in
- let rec merge_sort f tab =
- let l = Array.length tab in
- if (l < 2) then tab else
- (
- let hl = Array.sub tab 0 (l / 2) in
- let hr = Array.sub tab (l/2) (l - l/2) in
- let sl = merge_sort f hl in
- let sr = merge_sort f hr in
- merge_sorting f sl sr
- )
- in
- let int_cmp a b = b - a in
- let pair_cmp a b =
- let (ax, ay) = a in
- let (bx, by) = b in
- let c = int_cmp ax bx in
- if (c <> 0) then c
- else (int_cmp ay by)
- in
- let t = (merge_sort pair_cmp [|(2, 7);(3,5);(6,2);(4,1);(1, 0);(79, 3);(4, -2)|]) in
- print_tab print_pair t;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement