我正在研究一个链表的冒泡排序算法。它在移动数据,但并没有正确地对数据进行排序。现在我只关心int型的链表。问题在哪里?非常感谢。
void List::linkedListBubbleSort()
{
bool swap = true;
Node * temp = firstNode;
Node * current;
if(firstNode == 0)
{
cout << "List is empty." << endl;
return;
}
else
{
while(swap == true)
{
for(current = firstNode; current != NULL && current->next != NULL; current = current->next)
{
if(current->data > current->next->data)
{
swap = true;
temp->data = current->data;
current->data = current->next->data;
current->next->data = temp->data;
}
else
swap = false;
}
}
你不必使用while(swap==true),因为在某些时候if(current->data>current->next->data)返回false,那么你的上循环while(swap==true)将不允许你继续迭代。
else
{
for(current = firstNode; current != NULL && current->next != NULL; current = current->next)
{
if(current->data > current->next->data)
{
temp->data = current->data;
current->data = current->next->data;
current->next->data = temp->data;
}
}
}
- 使用指向第一个节点的temp。因此,在交换时损坏了数据。2.你在第一次交换时停止,你只需要在完成传递整个列表并且没有交换完成时停止。
- 算法不正确。它应该是两个循环…查找冒泡排序。