[英]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.