0

我在对链表中的节点进行排序时遇到了一些问题。我能够成功地实现列表本身,但是当我尝试对其进行排序时,我失败了。我相信这是一个与我尝试比较聚合类型的引用指针有关的问题。我对指针或一般的 c++ 编程并不是很有经验。如果有人能帮助我指出正确的方向,我将不胜感激。

void sortNodes()
{
    int y, tmp;
    y = nodeCount();
    Node *curr, *prev;

    for (int i = 0; i < y; i++)
    {
        curr = root;
        for (int j = 0; j < y; j++)
        {
            prev = curr;
            curr = curr->next;
            if (prev->x > curr->x)
            {
                tmp = prev->x;
                prev->x = curr->x;
                curr->x = tmp;
            }
        }
    }
    curr = 0;
    prev = 0;
}
4

2 回答 2

2

您的第二个循环迭代了太多次(它运行y时间并在curr = curr->next每次访问之前执行curr->x)。此外,您不必每次都将第二个循环一直运行到最后,第一次运行后最后一个节点将包含最大值,两次运行后最后两个节点将具有最大值,等等。

否则,对我来说,它看起来像是一个很好的冒泡排序。如果你对这种事情...

于 2013-07-16T00:19:08.007 回答
0

您是否尝试按顺序对列表进行排序,例如 1, 2, 3, 4, ,5...n。如果是这样,我想指出您的代码只会将当前元素与下一个元素进行排序。而不是对整个列表进行排序。因此,如果您有一个列表:9、5、8、7、6、5、4、2。并且您想按升序排序。你最终会得到一个列表:5、8、7、6、5、4、2、9。因为它只比较两个节点并交换它们。如果要对整个列表进行排序,则需要另一个循环,只要当前元素小于前一个元素,它就会向后循环到根。您可能需要另一个函数而不是向后循环,将前一个节点推到当前节点,直到前一个节点小于临时节点。您可能还会发现该索引和迭代器在此排序中很有用。

于 2013-07-16T01:14:07.327 回答