冒泡排序链表没有排序

时间:2014-11-15 21:46:54

标签: c++ linked-list logic bubble-sort

为什么我的冒泡排序算法会对链表进行排序? 给定一个列表并调用该方法时,它将输出相同的列表。我的for循环内部当前逻辑出了什么问题?

private:
    IntNode *head, *tail;

节点结构:

struct IntNode
{
    int data;
    IntNode * next;
};

冒泡排序方法:

void NodeSLList::SortList()
{
    if (head == NULL || head->next == NULL)
        return;

    IntNode * current = head;
    IntNode * nextElement = current->next;
    IntNode * temp = NULL;

    int changed = 1;


    while (changed)
    {
        changed = 0;
        for (current; (current != NULL) && (nextElement = NULL); )
        {
            if (current->data > nextElement->data)
            {
                temp = current->next;
                current->next = nextElement->next;
                nextElement->next = temp;
                changed = 1;
            }
            current = current->next;
            nextElement = nextElement->next;
        }

    }

}

2 个答案:

答案 0 :(得分:1)

问题是由for循环中的赋值而不是比较引起的。

如果您正在实施链接列表,我建议您使用哨兵而不是头部 和NULL结束。这将删除所有角落案例'在插入和删除期间。
始终存在一个哨兵节点,不包含数据,指向第一个项目,
最后一项指向它。

我还建议使用Mergesort,它适用于链表,在O(NlogN)中运行,
并且没有空间开销。您可以找到实施here

答案 1 :(得分:0)

尝试通过调试器运行它。如果您在current循环的第二轮查看changed的值,您会看到current仍为null,因此第二次围绕changed 1}}循环它不会通过current循环。