【问题标题】:Linked list Bubblesort is not quite right链表冒泡排序不太对
【发布时间】:2013-05-05 07:19:23
【问题描述】:

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

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 检查指针。nullptr 可能比 NULL 更好。
  • 您不能将现有节点用作交换的临时持有者。
  • @n.m.我应该将 current->data 存储在 int 中吗?
  • 是的,试试看。另外,else swap=false 不正确,你应该在内循环之前做swap=false
  • 知道了,谢谢。

标签: c++ linked-list bubble-sort singly-linked-list


【解决方案1】:

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

         }

     }

【讨论】:

    【解决方案2】:
    1. 您使用指向第一个节点的 temp。结果,在交换时破坏了数据。 2.第一次交换时停止,只有当你完成通过整个列表并且没有交换完成时才需要停止。
    2. 算法不正确。应该是两个循环...搜索冒泡排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2016-02-09
      • 2012-07-19
      • 2015-08-20
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多