我试图使用插入排序方法来从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;
}
答案 0 :(得分:0)
这是一个家庭作业问题,所以我不会直接写出代码,而是先指出你哪里出错了。
在像算法这样的插入排序中,显然需要进行某种交换,这些交换需要在不合适的元素之间进行(需要插入)。因此,首先考虑如何交换数组的两个元素。当一个人是头或一个是尾巴时要特别注意。
您实现的代码没有任何指针交换的痕迹,所以这是您错误的地方。
接下来,您必须考虑我们需要排序的情况。在这种情况下,它很简单。如果当前元素和下一个元素按排序顺序排列(假设是升序,则当前&lt; next)。然后不需要做任何事情,只需简单地使下一个当前。
然后你可以明显地推断,当你需要交换元素时,违反这种情况。在交换之后(适当注意指针的位置和排序后的位置),重复该过程,直到你击中空墙。
P.S:这可能是另一个SO问题的重复。