簡體   English   中英

冒泡排序鏈接列表未排序

[英]bubble sort linked list not sorting

為什么我的氣泡排序算法不能對鏈表進行排序? 當給定一個列表並調用該方法時,它將輸出相同的列表。 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;
        }

    }

}

該問題是由在for循環中分配而不是進行比較引起的。

如果您要實現鏈表,我是否建議您使用哨兵,而不是團長
和NULL作為結尾。 這會在插入和刪除過程中刪除所有“角落”。
一個崗哨節點始終存在,不包含任何數據,指向第一項,
最后一項指向它。

我也可以建議使用Mergesort ,它對於在O(NlogN)中運行的鏈表效果很好,
而且沒有空間開銷。 您可以在此處找到實現

嘗試通過調試器運行它。 如果你看的價值current在第二次輪changed循環,你會看到, current仍然是null的,所以第二次輪changed循環也不會通過走current回路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM