嘿,我一直在尝试使用插入排序方法来处理我正在使用的类,并且我们被告知使用插入排序来对整数的链接列表进行排序,而不使用Java中已有的链接列表类库。
这是我的内部Node类我只是单独链接,因为我还没有完全掌握圆形双链表概念
public class IntNode
{
public int value;
public IntNode next;
}
这是我在IntList类中的插入排序方法
public IntList Insertion()
{
IntNode current = head;
while(current != null)
{
for(IntNode next = current; next.next != null; next = next.next)
{
if(next.value <= next.next.value)
{
int temp = next.value;
next.value = next.next.value;
next.next.value = temp;
}
}
current = current.next;
}
return this;
}
我遇到的问题是它没有完全排序它通过循环运行良好但不会操纵列表中的值根本不能有人请向我解释我做错了什么我是初学者。
答案 0 :(得分:1)
您需要每次从列表中的第一个节点开始,循环应以列表尾部-1结束 像这样
public static IntList Insertion()
{
IntNode current = head;
IntNode tail = null;
while(current != null&& tail != head )
{
IntNode next = current;
for( ; next.next != tail; next = next.next)
{
if(next.value <= next.next.value)
{
int temp = next.value;
next.value = next.next.value;
next.next.value = temp;
}
}
tail = next;
current = head;
}
return this;
}
答案 1 :(得分:0)
插入操作仅在插入的列表已经排序时才有效 - 否则您只是随机交换元素。首先,从原始列表中删除一个元素并从中构造一个新列表 - 该列表只有一个元素,因此它被排序。现在继续从原始列表中删除剩余元素,然后将它们插入到新列表中。最后,原始列表将为空,新列表将被排序。
答案 2 :(得分:0)
我同意Zim-Zam的意见。 插入排序的循环不变量也指定了这个:&#34;按排序顺序排列的子阵列&#34;。 下面是我为插入排序实现的代码,其中我创建了另一个包含排序顺序元素的链表:
Node newList=new Node();
Node p = newList;
Node temp=newList;
newList.data=head.data;
head=head.node;
while(head!=null)
{
if(head.data<newList.data)
{
Node newTemp = new Node();
newTemp.data=head.data;
newTemp.node=newList;
newList=newTemp;
p=newList;
}
else
{
while(newList!=null && head.data>newList.data)
{
temp=newList;
newList=newList.node;
}
Node newTemp = new Node();
newTemp.data=head.data;
temp.node=newTemp;
newTemp.node=newList;
newList=p;
}
head=head.node;
}