所以我尝试使用ML的引用类型来实现bubblesort。我在Poly / ML中编译了代码,似乎“while(!flag)”循环只对任何输入执行一次。
例如:[2,3,1]被“排序”到[2,1,3],即第一个循环工作但第二个循环从未运行。
“举起旗帜”打印一次。
怎么了?
感谢。
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。
答案 0 :(得分:4)
Bubblesort反复扫描同一个数组。你的内部循环只扫描一次,但从不重置计数器while((line = bufferedReader.readLine()) != null) {
Name name = new Name();
name.setName(line);
nameAL.add(name);
}
。行前
it
你应该放行
while ((!it) < (len-1)) do