java - 对链表进行排序仅适用于冗余迭代器

标签 java sorting

我编写了代码来对学校作业的 LinkedList 进行排序。它可以工作,但运行次数不够。所以我添加了第三个 for 循环,现在它可以工作了,但我不明白为什么它只适用于第三个迭代器。有人可以看看我的代码并告诉我我做错了什么吗?我应该怎么做?这感觉不对,几乎无法处理大于 1000 的链表。

    public void sort() {
    Node min;
    for (Node shouldNotNeedThis = head; shouldNotNeedThis != null; shouldNotNeedThis = shouldNotNeedThis.next) {
        for (Node ix = shouldNotNeedThis.next; ix != null; ix = ix.next) {
            min = ix;
            for (Node tx = ix.next; tx != null; tx = tx.next) {
                if (tx.compareTo(min) == -1) {
                    min = tx;
                }
            }
            if (min != ix) {
                swapNodes(ix, min);
                ix = min;
            }
        }
    }
}

public void swapNodes(Node currentNode, Node nextNode) {
    Integer temp = currentNode.data;
    currentNode.data = nextNode.data;
    nextNode.data = temp;
}

最佳答案

您的问题在这里:

        if (min != ix) {
            swapNodes(ix, min);
            ix = min;
        }

只需交换节点就足够了。通过将 ix 设置为 min,您可以将其设置为列表其余部分中间某个任意值,该值曾经保持最小值(但不再是了)。不幸的是, ix 是您用来迭代列表的变量。因此,每次设置 ix 时,您都会跳过一些元素。

关于java - 对链表进行排序仅适用于冗余迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055716/

相关文章:

java - 在我的 Play 应用程序中使用 Ebean/JPA,如何删除 OneToOne 关系中的对象?

java - 创建两个entityManagerFactory

perl - "isn' t 数字 "error in "排序 "after "uniq"

c++ - 基于矩阵引起的排序对 vector 进行排序时出现段错误

javascript - react / react Hook : child component is not re-rendering after the state is changed?

ios - 按月对数据进行排序

java - RGB 颜色空间到原始颜色名称的映射

java - 在列表 <Object> 中找到相同的值?

Java HTTP Post - 奇怪的流行为

Javascript:排序多维数组