2016-04-16 8 views
0

Diese Einfügesortierung gehört zu einer doppelt verknüpften Liste. Es scheint nichts auszudrucken. Tut mir leid, wenn das chaotisch ist. Ich bin ziemlich neu beim Posten von Dingen. Ich habe es debugged, indem ich in SYSOUT setzte. Ich glaube, dass es ein Problem mit dem Austausch gab, den ich verwendete sysout & Ich bemerkte, dass das dort war, wo das Problem auftrat. Jede Hilfe würde sehr geschätzt werden. Ich habe auch meine App-Klasse überprüft, die in Ordnung scheint.Einfügesortierung funktioniert nicht in einer Doppellinkliste

public boolean insertionSort() 
{ 
if (getFirst().next != null) 
{ 
    return false; 
} 
    Link current = getFirst().next; 
    Link current2 = current; 

    while(current != null){ 
    current2 = current; 
    while(current2.prev != null){ 
     int tempID = Integer.valueOf(current2.Data.getID()); 
     int temp2ID = Integer.valueOf(current2.prev.Data.getID()); 
if(tempID < temp2ID) 
    { 
    swap(current2, current.prev); 
    } 
    current2 = current2.prev; 
} 
    current = current.next; 
} 
    return true; 
} 


public void swap(Link x, Link y) 
    {  

    Link previousNode1 = x.prev; 

    Link nextNode1 = x.next; 

    Link previousNode2 = y.prev; 

    Link nextNode2 = y.next; 


    if (x.next == y || y.next == x) 
    { 

     previousNode1.next = y; 

     y.prev = (previousNode1); 

     nextNode2.next = (x); 

     x.next = (nextNode2); 

     x.prev = (y); 

     y.next = (x); 
    } 


    else 
    { 
     y.prev = (previousNode1); 

     y.next = (nextNode1); 

     nextNode1.prev = (y); 

     previousNode1.next = (y); 

     x.prev = (previousNode2); 

     x.next = (nextNode2); 

     nextNode2.prev = (x); 

     previousNode2.next = (x); 
    } 

} // end swap 

Antwort

0

Sie haben nur einen Teil Ihres Codes angegeben. Es ist also schwierig herauszufinden, was genau falsch ist. Aber auf den ersten Blick auf Ihre InsertionSort Methode, ist es das, was falsch ist. Ganz am Anfang Sie eine Bedingung Aussage haben

if (getFirst().next != null){ 
    return false; 
} 

Dies bedeutet, dass die Funktion sofort zurück, wenn getFirst() als nächstes nicht null. Wenn der Programmablauf diese Bedingung erfüllt, d. H. GetFirst(). Next ist null, weisen Sie diesen null zwei Variablen current und current2 zu. Und dann führen Sie eine While-Schleife mit der Bedingung . Wie soll diese Funktion etwas bewirken?

Korrigieren Sie zunächst die if-Bedingung. Wahrscheinlich müssen Sie nur zurückgeben, wenn getFirst(). Next null ist (nicht zurück, wenn es nicht null ist). Dann sehen Sie, ob Sie Ihre gewünschte Ausgabe erhalten oder nicht. Wenn nicht, geben Sie bitte mehr Details zu Ihrem Problem an.