【发布时间】:2015-10-20 21:30:21
【问题描述】:
我正在尝试使用数组来实现冒泡排序,但这样做很困难。到目前为止,这是我所拥有的:
fun swap(A, i, v) =
let
val temp = sub(A, i);
in
update(A, i, sub(A, v));
update(A, v, temp)
end;
这需要恒定的时间,所以到目前为止一切都很好。
异常空;
fun bubbleSort(nil, i) = raise Empty
(* if has one element, already sorted)
| bubbleSort(
(* if at least two elements, compare *)
| bubbleSort(A, i) =
if i < A.length then
if sub(A, i) > sub(A, i+1) then
swap(A, i, i+1)
else bubbleSort(i+1);
1) 现在,这只会遍历 >= 2 个元素的数组一次。但是冒泡排序算法会一直持续到您不再需要交换元素为止,我不确定如何递归实现。
2) 我们如何对长度为 1 的数组进行模式匹配?如果有一个列表,那就是bubbleSort([x])...
任何帮助实施都会很棒, 布莱曼
【问题讨论】:
标签: arrays functional-programming sml