插入排序以对链接列表中的节点进行排序

时间:2013-10-24 02:38:07

标签: 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) {
                node_ptr = i;
                head = head->next;
    }
    }
    return node_ptr;
}

1 个答案:

答案 0 :(得分:0)

这是一个家庭作业问题,所以我不会直接写出代码,而是先指出你哪里出错了。

在像算法这样的插入排序中,显然需要进行某种交换,这些交换需要在不合适的元素之间进行(需要插入)。因此,首先考虑如何交换数组的两个元素。当一个人是头或一个是尾巴时要特别注意。

您实现的代码没有任何指针交换的痕迹,所以这是您错误的地方。

接下来,您必须考虑我们需要排序的情况。在这种情况下,它很简单。如果当前元素和下一个元素按排序顺序排列(假设是升序,则当前&lt; next)。然后不需要做任何事情,只需简单地使下一个当前。

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

P.S:这可能是另一个SO问题的重复。