我在处理下面的链接列表选择排序时遇到问题:
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
这里的排序有什么问题?
最佳答案
这个:
LN temp = r;
r.value = min.value;
min.value = temp.value;
是错误的。通过将 temp
设置为等于 r
,您实际上使它们引用同一个对象;因此修改r.value
相当于修改temp.value
。所以上面的结果并没有真正修改 min.value
;它只是将 min.value
设置为原来的值。
相反,你应该写:
int temp = r.value;
r.value = min.value;
min.value = temp;
关于java - 链表上的选择排序输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445693/