C# 我正在尝试使用插入排序以排序方式在列表中插入节点
我试图用C#on链表实现桶排序算法,但得到了正确的结果。此函数应在参数中获取列表和节点,然后按正确的升序插入该节点。 我有一个列表[4,7,12,15],我希望以升序插入数据为20的新节点,例如此列表成为[4,7,12,15,20]。但结果我得到了此列表[4,7,12,20,15],请帮助我,其中有什么问题。我猜while循环中存在一些问题。此函数调用的所有其他函数都可以完美地工作C# 我正在尝试使用插入排序以排序方式在列表中插入节点,c#,linked-list,insertion-sort,bucket-sort,C#,Linked List,Insertion Sort,Bucket Sort,我试图用C#on链表实现桶排序算法,但得到了正确的结果。此函数应在参数中获取列表和节点,然后按正确的升序插入该节点。 我有一个列表[4,7,12,15],我希望以升序插入数据为20的新节点,例如此列表成为[4,7,12,15,20]。但结果我得到了此列表[4,7,12,20,15],请帮助我,其中有什么问题。我猜while循环中存在一些问题。此函数调用的所有其他函数都可以完美地工作 static public void InsertionSort(LinkedList list, No
static public void InsertionSort(LinkedList list, Node s)
{
int data = s.getData();
if (list.start.getNext() == null)
list.InsertAtEnd(data);
else
{
int key = 0;
Node temp = list.start;
while (temp.getNext() != null)
{
temp = temp.getNext();
if (data >= temp.getData())
key++;
}
list.InsertAt(key, data);
}
}
派生函数(主函数):
LinkedList=新建LinkedList();
int[]数组={4,7,12,15};
for(int i=0;i
输出:
:开头的设置是错误的
int[] array = { 4, 7, 12, 15 };
for (int i = 0; i < array.Length; i++)
list.InsertAtBegin(array[i]);
此外,您的插入算法也不是最优的 对于链表,访问列表中的某个元素的成本很高,因为您必须始终从起点移动到正确的位置 代码首先尝试找到插入新元素的正确位置,然后调用另一个方法
InsertAt
,该方法必须从头开始遍历列表才能再次找到相同的位置
相反,请更改代码,以便在找到具有更高值的元素后立即直接插入新节点。感谢所有试图帮助我的人。我有正确的密码。现在它产生了100%的准确结果
static public void InsertionSort(LinkedList list, int data)
{
Node n = new Node(data);
Node temp = list.start;
Node sNode = null;
while(temp.getNext() !=null)
{
if (data >= temp.getNext().getData())
sNode = temp.getNext();
temp = temp.getNext();
}
if (sNode == null)
list.InsertAtBegin(data);
else
list.InsertAfter(sNode,n);
}
请与其链接到代码的图像(这对我们帮助不大),不如将代码复制并粘贴到您的问题中。更好!谢谢谢谢,我已经添加了代码,请检查一下,是否有错误或异常?您可以在这里添加一些日志记录。下一步:当您说:
插入排序功能出现问题时,请告诉我们问题是什么<代码>某些问题
对我们没有帮助。如果有错误消息,请向我们显示错误。或者,如果代码运行时没有错误,则向我们显示结果,以及您想要的结果。我尝试了InsertAttend和InsertBeging,但仍然遇到错误。您总是遍历整个列表,并将要插入的值与列表中的每个值进行比较。一旦找到小于要插入的值,就可以停止while循环。另外,我怀疑list.start对于空列表可能为null?然后,您可能会得到NullReferenceExceptions,并且在搜索要插入的正确位置时会跳过第一项。乍一看,如果您的LinkedList只包含一个数字,而您尝试插入一个较大的数字,我怀疑这会出错。
int[] array = { 4, 7, 12, 15 };
for (int i = 0; i < array.Length; i++)
list.InsertAtEnd(array[i]);
int[] array = { 4, 7, 12, 15 };
for (int i = array.length - 1; i >= 0; i--)
list.InsertAtBegin(array[i]);
static public void InsertionSort(LinkedList list, int data)
{
Node n = new Node(data);
Node temp = list.start;
Node sNode = null;
while(temp.getNext() !=null)
{
if (data >= temp.getNext().getData())
sNode = temp.getNext();
temp = temp.getNext();
}
if (sNode == null)
list.InsertAtBegin(data);
else
list.InsertAfter(sNode,n);
}