Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入排序对LinkedList中的节点进行排序_C++_Linked List_Nodes_Insertion Sort - Fatal编程技术网

C++ 插入排序对LinkedList中的节点进行排序

C++ 插入排序对LinkedList中的节点进行排序,c++,linked-list,nodes,insertion-sort,C++,Linked List,Nodes,Insertion Sort,我正在尝试使用插入排序方法对LinkedList中的节点进行排序。我已经调整代码很多次了,但我似乎不能完全得到它,继续得到不同类型的结果,没有排序 代码如下: Node* sort_list(Node* head) { Node* node_ptr = NULL; for(Node* i = head->next; i->next != NULL; i = i->next){ if (i->key < head->key

我正在尝试使用插入排序方法对LinkedList中的节点进行排序。我已经调整代码很多次了,但我似乎不能完全得到它,继续得到不同类型的结果,没有排序

代码如下:

Node* sort_list(Node* head)
{
    Node* node_ptr = NULL;
    for(Node* i = head->next; i->next != NULL; i = i->next){
            if (i->key < head->key) {
                node_ptr = i;
                head = head->next;
    }
    }
    return node_ptr;
}
Node*排序列表(Node*head)
{
Node*Node_ptr=NULL;
对于(节点*i=head->next;i->next!=NULL;i=i->next){
如果(i->keykey){
节点_ptr=i;
头部=头部->下一步;
}
}
返回节点ptr;
}

这是一个家庭作业问题,因此我将首先指出您的错误所在,而不是直接编写代码

在类似插入排序的算法中,显然需要在不合适的元素(即需要插入的元素)之间进行某种交换。因此,首先考虑如何交换数组的两个元素。特别注意一个是头部或一个是尾部的情况

您实现的代码没有任何指针交换的痕迹,因此这就是您的错误所在

接下来,当我们需要分类时,您必须考虑案例。在这种情况下,它相当简单。如果当前元素和下一个元素按顺序排序(假定升序,当前元素<下一个)。然后什么都不需要做,只需将下一个设置为当前

然后,您可以很明显地推断,当您需要交换元素时,就会违反这种情况。交换后(适当注意指针在排序后的位置),重复该过程直到碰到空墙


注:这可能是另一个SO问题的重复

搜索类似的问题来帮助你理解。Fwiw,这也不做插入排序(或任何其他类型的可描述排序)。根据其定义,插入排序是O(NlogN)复杂度,因为较低的段使用二进制搜索来定位已排序的子序列中要插入的下一项的位置,这项任务对于链表来说并不容易,但对于随机访问容器来说却微不足道。