我编写了代码来为学校作业排序一个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;
}
答案 0 :(得分:0)
你的问题在这里:
if (min != ix) {
swapNodes(ix, min);
ix = min;
}
交换节点就足够了。通过将ix设置为min,您可以将其设置为列表其余部分中间的某个任意值,该值曾经保持最小值(但不再是)。不幸的是,ix是您用于遍历列表的变量。因此,每次设置ix时,都会跳过一些元素。