Schnelles Sortieren mit Rekursion auf eine verknüpfte Liste

Ich tun muss, um ein schnelles Sortieren mit Rekursion auf einer verlinkten Liste.... So weit ich das ok gewesen, aber ich lief in ein kleines problem, dass ich nicht sehen kann, um herauszufinden, warum es nicht richtig funktioniert.

Hier ist die Objekt-Knoten:

    public class Node
    {
      String name;
      Node next;
    }

Hier ist der Programm-code:

    public class QuickSortRecusionLinkedList
    {
      public static void quickS(int start, int finish, Node head, Node tail)
      {
        int left = start;
        int right = finish;
        Node pivot = head;
        for(int i = 0; i < ((left+right)/2); i++)
        {
          pivot = pivot.next;
        }
        Node temp = new Node();
        Node leftN = head;
        Node rightN = head;

        while(right > left)
        {
          leftN = head;
          for(int i = 0; i < left; i++)
          {
            leftN = leftN.next;
          }
          while ((leftN.name).compareToIgnoreCase((pivot.name))<0)
          {
            left = left + 1; 
            leftN = leftN.next;
          }
          rightN = head;
          for(int i = 0; i < right; i++)
          {
            rightN = rightN.next;
          }
          while ((pivot.name).compareToIgnoreCase((rightN.name))<0)
          {
            right = right - 1;
            rightN = head;
            for(int i = 0; i < right; i++)
            {
              rightN = rightN.next;
            }
          }

          if ( left <= right
             )
          {
            temp.name = leftN.name;
            leftN.name = rightN.name;
            rightN.name = temp.name;

            left = left +1;
            leftN = leftN.next;

            right = right -1;
            rightN = head;
            for(int i = 0; i < right; i++)
            {
              rightN = rightN.next;
            }

            int size = 1;
            temp = head;
            while (temp!=tail)
            {
              temp = temp.next;
              size++;
            }
            temp = head;
            while(temp != tail)
            {
              System.out.print(temp.name + ", ");
              temp = temp.next;
            }
            System.out.println(tail.name + ".");
          }
        }

        if(start < right) 
          quickS(start, right, head, tail);
        if(left < finish) 
          quickS(left, finish, head, tail);
      }

      public static void main(String[] args)
      {
        Node head = new Node();
        Node tail = new Node();
        Node a = new Node();
        Node b = new Node();
        Node c = new Node();

        head.name = "R";
        tail.name = "D";
        a.name = "Z";
        b.name = "C";
        c.name = "P";

        head.next = a;
        a.next = b;
        b.next = c;
        c.next = tail;

        int size = 0;
        Node temp = head;
        while (temp!= tail)
        {
          temp = temp.next;
          size++;
        }

        quickS(0,size,head,tail);
      }

    }

Hier ist der Ausdruck:

C, Z, R, P, D.
C, Z, R, P, D.
C, D, R, P, Z.
C, D, P, R, R.
C, D, P, R, R.
C, D, P, R, R.

Das Endergebnis sein sollte C, D, P, R, Z. aber aus irgendeinem Grund ist das Programm ersetzen Z für andere R. Was ist falsch an dem code?

  • entweder formatieren Sie den code oder pastebin es.
  • Was sehen Sie, wenn Sie den debugger verwenden?
  • First off, ich habe keine Ahnung, wie Bearbeiten Sie den code so, dass es normal ist, und nicht alle verrückt wie ich es jetzt... das war die beste, die ich bewältigen könnte, sorry.
  • Ich habe keine Ahnung, wie man den debugger verwenden.... Ich in der Regel verwenden Sie einfach printlns..
  • Ist dieses Hausaufgaben? Wenn nicht, warum nicht einfach Sammlungen.Sortieren?
  • Verwenden Sie die {} - Taste, um format-code. Ich habe dies getan, für Sie in dieser Zeit.
  • Wenn Hausaufgaben bitte tag so
  • Eine gute Gelegenheit zum kennenlernen-debugger.
  • Ich weiß, es ist eine ziemlich dumme Sache zu tun.. aber ich habe dennoch immer noch müssen, tun es, weil der IB, und dieser kleine Fehler ist, zu ruinieren meine 30% Wert Projekt T. T
  • danke marcog für die Bearbeitung von text, ja, es ist Hausaufgaben... IB informatik-internen Bewertung, die ich brauchen, um eine Quickort mit Rekursion auf meine Link-Liste für die Beherrschung Faktoren..
  • Tagged als Hausaufgabe

InformationsquelleAutor S.Pedro | 2011-02-23
Schreibe einen Kommentar