DM1.ml 830 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. let fusion t l m u =
  2. let aux = Array.make (u-l+1) t.(0) and i = ref l
  3. and j = ref (m+1) and k = ref 0 in
  4. while (!i <= m) && (!j <= u) do
  5. if (t.(!i) <= t.(!j))
  6. then
  7. begin
  8. aux.(!k) <- t.(!i);
  9. i := !i + 1
  10. end
  11. else
  12. begin
  13. aux.(!k) <- t.(!j);
  14. j := !j + 1
  15. end;
  16. k := !k + 1
  17. done;
  18. while (!i <= m) do
  19. aux.(!k) <- t.(!i);
  20. i := !i + 1;
  21. k := !k + 1
  22. done;
  23. while (!j <= u) do
  24. aux.(!k) <- t.(!j);
  25. j := !j + 1;
  26. k := !k + 1
  27. done;
  28. for x=0 to (!k-1) do
  29. t.(l+x) <- aux.(x)
  30. done
  31. ;;
  32. let tri_fusion t =
  33. let rec tri_fusion_aux t l u =
  34. if (l < u) then
  35. begin
  36. let m = (l+u)/2 in
  37. tri_fusion_aux t l m;
  38. tri_fusion_aux t (m+1) u;
  39. fusion t l m u;
  40. end
  41. in tri_fusion_aux t 0 (Array.length t - 1)
  42. ;;