0

我正在研究链表的冒泡排序算法。它正在移动数据,但并没有完全正确地对数据进行排序。现在我只担心整数的链表。问题出在哪里?非常感谢。

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;
             }

         }
4

2 回答 2

0

您不必使用 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;
             }

         }

     }
于 2013-05-05T07:38:32.677 回答
0
  1. 您使用指向第一个节点的 temp 。结果,在交换时破坏了数据。2.你在第一次交换时停止,只有当你完成通过整个列表并且没有交换完成时才需要停止。
  2. 算法不正确。它应该是两个循环...搜索冒泡排序。
于 2013-05-05T07:43:27.783 回答