气泡排序链表不排序
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) 中运行,
并且没有头顶空间。您可以在此处找到实现
尝试通过调试器运行它。如果你在第二次绕changed
循环时查看current
的值,你会发现current
仍然是null
,所以第二次绕changed
循环时它不会通过current
循环。
相关文章:
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 合并两个排序链表时运行时出错
- 在 C++ 中合并两个排序链表
- 在排序链表中插入结构并将其写入二进制文件
- C++:按数字排序链表错误
- 家庭作业的排序链表程序中的分段错误
- 删除已排序链表中的值
- 排序链表-移动节点还是交换数据成员
- 单排序链表-无限循环
- 插入排序链表c++
- 冒泡排序链表C++
- 将元素添加到排序链表C++时出现问题
- 升序排序 - 链表
- 气泡排序链表不排序
- C++ 中的排序链表不会插入
- 删除具有重复相同值的已排序链表中的重复值
- 未排序链表实现检查完毕
- 插入排序链表c++
- c++中从排序链表中删除重复值节点的方法
- 排序链表和addSorted函数问题