【发布时间】:2017-10-30 01:46:29
【问题描述】:
所以我尝试使用 ML 的引用类型来实现 bubblesort。我在 Poly/ML 中编译了代码,似乎“while(!flag)”循环只对任何输入执行一次。
例如:[2,3,1] 被“排序”为 [2,1,3],即第一个循环有效,但第二个循环从未运行。
“Flag up”被打印了一次。
怎么了?
谢谢。
fun bubbleSort l = (* l being a list of references *)
let
val it = ref 0 (* iterator variable *)
val len = length l
val flag = ref true (* to be set to true when a swap is made *)
in
while (!flag) do
(
flag := false;
while ((!it) < (len-1)) do
(
if (get l (!it)) > (get l ((!it)+1))
then (swap_next l (!it); flag := true; TextIO.print "Flag up\n")
else ();
it := (!it) + 1
)
)
end;
我写的模块的完整代码,如果需要,可以找到here。
【问题讨论】:
-
路过评论:53.33%(精确测量)的括号是多余的。
-
谢谢!我知道其中一些会是多余的,但我正在匆忙准备考试,因为正确性比风格更重要,所以我让它滑了:)
标签: while-loop reference sml bubble-sort ml