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.valuemin.valueすでにあったものに設定するだけです。

代わりに、次のように書く必要があります。

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