C# 我正在尝试使用插入排序以排序方式在列表中插入节点

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

我试图用C#on链表实现桶排序算法,但得到了正确的结果。此函数应在参数中获取列表和节点,然后按正确的升序插入该节点。 我有一个列表[4,7,12,15],我希望以升序插入数据为20的新节点,例如此列表成为[4,7,12,15,20]。但结果我得到了此列表[4,7,12,20,15],请帮助我,其中有什么问题。我猜while循环中存在一些问题。此函数调用的所有其他函数都可以完美地工作


    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);
        }