Wie man eine verlinkte Liste mit bubble-sort?

Ich versuche, mit bubble-sort in der Reihenfolge zu Sortieren, eine verknüpfte Liste. Ich benutze curr und trail um die traverse durch die Liste. curr soll einen Schritt Voraus sein Weg immer. Das ist mein code bisher:

void linked_list::sort ()
{
  int i,j=0;
  int counter=0;
  node *curr=head;
  node *trail=head;
  node *temp=NULL;

  while (curr !=NULL)
  {
    curr=curr->next;    //couting the number of items I have in my list. 
    counter++;          //this works fine.
  }

  curr=head->next;          //reseting the curr value for the 2nd position.

  for (i=0; i<counter; i++)
  {
    while (curr != NULL)
    {
      if (trail->data > curr->data)
      {
        temp=curr->next;      //bubble sort for the pointers.
        curr->next=trail;
        trail->next=temp;

        temp=curr;         //reseting trail and curr. curr gets back to be infront.
        curr=trail;     
        trail=temp;

        if (j==0)   //i'm using j to determine the start of the loop so i won't loose the head pointer.
        {
          head=trail;
        }

      }
      j++;
      trail=curr;
      curr=curr->next;   //traversing thru the list. nested loop.
    }

    trail=head;
    curr=trail->next;
    curr->next=trail->next->next;  //traversing thru the list. outer loop.
    j=0;
  }
}

Was vermisse ich hier?

Und was genau ist das problem?
Sie dürfen std::swap, und entfernen Sie temp. BTW, sollten Sie diese Frage im code-review-Bereich.

InformationsquelleAutor Reboot_87 | 2013-10-22

Schreibe einen Kommentar