链表冒泡排序并不完全正确

Linked list Bubblesort is not quite right

本文关键字:完全正确 冒泡排序 链表      更新时间:2023-10-16

我正在研究一个链表的冒泡排序算法。它在移动数据,但并没有正确地对数据进行排序。现在我只关心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;
             }
         }
     }
  1. 使用指向第一个节点的temp。因此,在交换时损坏了数据。2.你在第一次交换时停止,你只需要在完成传递整个列表并且没有交换完成时停止。
  2. 算法不正确。它应该是两个循环…查找冒泡排序。