0

我在下面的链接列表选择排序中遇到了问题:

public static void selectionSort(LN l) {
    for (LN r = l; r != null; r = r.next) {
        LN min = r;
        for (LN s = r; s != null; s = s.next)
            if (min.value > s.value)
                min = s;
        LN temp = r;
        r.value = min.value;
        min.value = temp.value;
    }
}

所以对于输入:10, 4,6,2,1,7,9,8,5,3 我得到输出:1,1,1,1,1,3,3,3,3,3

这里的排序有什么问题?

4

1 回答 1

2

这:

        LN temp = r;
        r.value = min.value;
        min.value = temp.value;

是错的。通过设置tempequal r,您实际上是在使它们引用同一个对象;所以修改r.value等价于修改temp.value。所以上面的结果并没有真正修改min.value;它只是设置min.value为它已经是什么。

相反,你应该写:

        int temp = r.value;
        r.value = min.value;
        min.value = temp;
于 2012-11-18T23:27:55.710 回答