| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- let fusion t l m u =
- let aux = Array.make (u-l+1) t.(0) and i = ref l
- and j = ref (m+1) and k = ref 0 in
-
- while (!i <= m) && (!j <= u) do
- if (t.(!i) <= t.(!j))
- then
- begin
- aux.(!k) <- t.(!i);
- i := !i + 1
- end
- else
- begin
- aux.(!k) <- t.(!j);
- j := !j + 1
- end;
- k := !k + 1
- done;
- while (!i <= m) do
- aux.(!k) <- t.(!i);
- i := !i + 1;
- k := !k + 1
- done;
- while (!j <= u) do
- aux.(!k) <- t.(!j);
- j := !j + 1;
- k := !k + 1
- done;
- for x=0 to (!k-1) do
- t.(l+x) <- aux.(x)
- done
- ;;
- let tri_fusion t =
- let rec tri_fusion_aux t l u =
- if (l < u) then
- begin
- let m = (l+u)/2 in
- tri_fusion_aux t l m;
- tri_fusion_aux t (m+1) u;
- fusion t l m u;
- end
- in tri_fusion_aux t 0 (Array.length t - 1)
- ;;
|