java - Quicksort Linked List Pivot Last Element -


i'm trying implement quicksort sorting cyclic linked list!

there doublylinkedlist contains listelements.

the listelement has element first, has reference predecessor , successor.

e.g. doublelinkyedlist in contains listelement first. first can referenced first.prev oder first.next.

the last element in linked list has reference first element e.g. last = first.prev;

my problem is, keep getting error, don't know 1 precisely, cause it's never ending loop , terminal not printing precise exception.

my code of class sorter.java implement sorting operation:

package ads1ss13.pa;   public class sorter {  public doublylinkedlist quicksort(doublylinkedlist in, int numofelements) {       system.out.println("starte sort() in quicksort()");      in = sort(in, in.first.getid(), in.first.prev.getid());      return in; }  public doublylinkedlist sort(doublylinkedlist in, int l, int r) {     system.out.println("sort()");      l = in.first.getid();     r = in.first.prev.getid();     listelement pivot = null;      system.out.println("l: "+l+"; r: "+r);      if(l < r)     {         pivot = in.first.prev;     }      system.out.println("pivot: "+pivot);      system.out.println("ausfuehren der partition mit l, r, pivot");      int p = partition(in, l, r, pivot);      system.out.println("ausgabe aus partition p: "+p);      system.out.println("ausführen der sort() mit l und p-1 für r");       sort(in, l, p-1);      system.out.println("ausführen der sort() mit p+1 für l, und r");     sort(in, p+1, r);      return in; }  public int partition(doublylinkedlist in, int l, int r, listelement pivot) {     system.out.println("partition()");      int = l;     int j = r;     listelement r_listelement = in.first.prev;     listelement i_element = in.first.next;     listelement j_element = pivot;      system.out.println("i: "+i+"; j: "+j+", pivot: "+j_element);      {          {             = + 1;             i_element = i_element.next;         } while (i_element.getkey() < pivot.getkey());          {             j = j - 1;             j_element = j_element.prev;          } while (j > || j_element.getkey() > pivot.getkey());          if(i_element.getkey() < j_element.getkey())         {             swap(in, i_element, j_element);         }      } while (i < j);      swap(in, i_element, r_listelement);      return i; }  public void swap(doublylinkedlist in, listelement links, listelement rechts) {     if(links.next.getid()==rechts.getid()){          listelement lprev = links.prev;         listelement rnext = rechts.next;         lprev.next=rechts;         rechts.prev=lprev;         links.next=rnext;         rnext.prev=links;         links.prev=rechts;         rechts.next=links;          }          else if(rechts.next.getid()==links.getid())         {             swap(in, rechts, links);         }         else         {             listelement lprev=links.prev;             listelement lnext = links.next;              links.next=rechts.next;             links.prev=rechts.prev;             rechts.next=lnext;             rechts.prev=lprev;              links.prev.next=links;             links.next.prev=links;             rechts.prev.next=rechts;             rechts.next.prev=rechts;         }           if(in.first.getid()==links.getid())         {             in.first = rechts;         }         else if(in.first.getid()==rechts.getid())         {             in.first = links;          } } } 

do have idea why code never switches second recursive call of sort() , error returned?

this hard analyze because can't throw code debugger. however, few things on right track:

issue 1.

you take int l , int r arguments, yet overwrite them:

l = in.first.getid(); r = in.first.prev.getid(); 

this not want do, restart on , on again. what's causing infinite loop.

issue 2.

if(l < r) {     pivot = in.first.prev; } 

if l >= r, pivot null, cause nullpointerexception

issue 3.

your partition logic wrong. don't need have nested loop. compare element pivot, can swap (you know side of pivot supposed on).


Comments

Popular posts from this blog

java - Jmockit String final length method mocking Issue -

asp.net - Razor Page Hosted on IIS 6 Fails Every Morning -

c++ - wxwidget compiling on windows command prompt -