2013-05-05 74 views
0

我正在为链表创建一个bubblesort算法。它正在移动数据,但它没有正确地对数据进行整理。现在我只担心链接的整数列表。问题在哪里?非常感谢。链接列表Bubblesort不太正确

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

     } 
+0

我不会检查一个针对0的指针。nullptr可能更好,甚至比NULL更好。 – ChiefTwoPencils 2013-05-05 07:36:18

+0

您不能将现有节点用作交换的临时持有者。 – 2013-05-05 07:40:38

+0

@ n.m。我应该将current-> data存储在int中吗? – user2302335 2013-05-05 07:59:17

回答

0

你不必使用一段时间(交换==真)因为在某些点处,如果(电流 - >数据>电流 - >下一步 - >数据)返回false,那么你的上环,而(交换==真)不会让你迭代进一步。

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

     } 

    } 
0
  1. 您使用临时指向第一个节点。因此,交换时会损坏数据。 2.您在第一次交换时停下来,只有当您完成传递整个列表并且没有完成交换时才需要停止。
  2. 该算法不正确。它应该是两个循环...搜索冒泡排序。