У меня есть задание перевести следующий код ML на Java, но я не могу сказать, что он делает. Что здесь делают функции «halfve» и «merge»?понимание merge sort in ML
fun halve nil = (nil, nil)
| halve [a] = ([a], nil)
| halve (a :: b :: cs) =
let
val (x, y) = halve cs
in
(a :: x, b :: y)
end;
fun merge (nil, ys) = ys
| merge (xs, nil) = xs
| merge (x :: xs, y :: ys) =
if (x > y) then x :: merge(xs, y :: ys)
else y :: merge(x :: xs, ys);
fun mergeSort nil = nil
| mergeSort [a] = [a]
| mergeSort theList =
let
val (x, y) = halve theList
in
print("xList: "^printList(x));
print("yList: "^printList(y));
merge(mergeSort x, mergeSort y)
end;
'halve' и' merge' являются в значительной степени основой алгоритма сортировки слиянием. Имеет смысл рассматривать алгоритм, а не код, поскольку это то, что является общим для реализации SML и Java. –