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

时间:2015-12-03 00:28:13

标签: 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;
}

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

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

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