2016-04-16 1 views
0

Ce tri d'insertion appartient à une liste à double liaison. Cela ne semble pas impressionner quoi que ce soit. Désolé si c'est désordonné. Je suis assez nouveau pour poster des choses. Je l'ai débogué en mettant dans sysout. Je crois qu'il y a un problème avec l'échange que j'ai utilisé sysout & J'ai remarqué que c'est là que le problème se produisait. Toute aide serait grandement appréciée. J'ai également vérifié ma classe d'application qui semble bien.Inverser le tri par insertion ne fonctionne pas dans une liste à double liaison

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 

Répondre

0

Vous n'avez donné qu'une partie de votre code. Il est donc difficile de comprendre ce qui ne va pas. Mais au premier coup d'oeil à votre méthode de InsertionSort, voici ce qui est faux. Au début, vous avez une instruction de condition

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

très Cela signifie que la fonction retourne immédiatement si getFirst() suivant est non nulle. Si le flux de programme satisfait à cette condition, c'est-à-dire que getFirst(). Next est null, vous affectez ce null à deux variables current et current2. Et puis vous exécutez une boucle while avec la condition while(current != null){...}. Comment cette fonction est-elle censée faire quoi que ce soit?

Corrigez d'abord la condition if. Probablement vous devez retourner seulement si getFirst(). Next est null (pas retourné si ce n'est pas null). Ensuite, voyez si vous obtenez votre sortie désirée ou non. Si non, donnez plus de détails sur votre problème.