java - 链表上的选择排序输出不正确

标签 java

我在处理下面的链接列表选择排序时遇到问题:

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/

相关文章:

java - 检查类(class)是否是类(class)的子类(class)

java - 为什么在将事件添加到每个饼图切片后,JavaFX PieChart 标签不显示? (Java 8)

java - Java中读取结构化文件

java - 我们可以在spring的xml配置中使用hasPermission保护表达式吗?

java - 如何在 Java 数组中存储 1 亿个整数?

java - 如何在字符串中查找重复项?

java - 使用android登录网站

java - 简单的结构类型 XML 数据绑定(bind)(无需代码生成或反射)

java - 如何在Java中使用屏幕图片而不保存它

java - 同一流应用程序中的 Kafka Streams 关闭 Hook 和意外异常处理