我尝试编写一个尾递归的归并排序代码。这个代码编译和运行都没问题。但是,输出结果是错误的,只输出一个整数。请问我应该如何修改这个代码,以便对整数列表进行排序并输出正确结果。
let rec merge L L2 P =
match L, L2 with
| [], [] -> P
| [], _ -> L2
| _, [] -> L
| hd::t1, hd2::t2 ->
if hd <= hd2 then
merge t1 L2 (P @ [hd])
else
merge L t2 (P @ [hd2])
//
// mergesort:
//
let rec ms L =
match L with
| [] -> []
| e::[] -> L
| _ ->
let mid = List.length L / 2
let (L, L2) = List.splitAt mid L
merge (ms L) (ms L2) []
P
不会影响输出。 - kvb