为什么这个标准ML bubblesort的循环只执行一次?

时间:2017-05-29 17:27:59

标签: while-loop reference sml bubble-sort ml

所以我尝试使用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

1 个答案:

答案 0 :(得分:4)

Bubblesort反复扫描同一个数组。你的内部循环只扫描一次,但从不重置计数器while((line = bufferedReader.readLine()) != null) { Name name = new Name(); name.setName(line); nameAL.add(name); } 。行前

it

你应该放行

while ((!it) < (len-1)) do