通过指针比较聚合类型的成员值



我在链表中对节点进行排序时遇到一些问题。我能够成功地实现列表本身,但当我尝试对其进行排序时,我失败了。我认为这是一个与我尝试比较聚合类型的延迟指针有关的问题。我对指针或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;
}

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

否则,对我来说,这看起来就像一个很好的泡泡糖。如果你喜欢那种东西。。。

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

相关内容

  • 没有找到相关文章

最新更新