2016-04-16 178 views
0

此插入排序屬於雙向鏈接列表。它似乎沒有打印任何東西。對不起,如果這是混亂。發佈內容我相當新。我通過放入sysout來調試它。我相信有一個交換問題,我用sysout &我注意到這是問題發生的地方。任何幫助將不勝感激。我也檢查了我的應用程序類似乎很好。交換插入排序不工作在雙向鏈接列表

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 

回答

0

您只給出了部分代碼。所以很難弄清究竟是什麼錯誤。但乍一看你插入排序方法,這是什麼是錯的:在一開始你有一個條件語句

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

這意味着該功能將如果getFirst()立即返回其次是不爲空。如果程序流程滿足這個條件,即getFirst()。next爲null,則將這個null分配給兩個變量current和current2。然後運行條件爲while(current != null){...}的while循環。這個函數應該怎麼做?

首先,更正if條件。可能只有在getFirst()。next爲null時才需要返回(如果不爲null,則不返回)。然後,看看你是否得到你想要的輸出。如果沒有,請提供有關您的問題的更多詳細信息。