2014-04-17 95 views
0

我想排序'數據'。數據假設按數字排序。我試圖實現BubbleSort(),但無法處理相同。BubbleSort自定義鏈接列表

public void bubbleSort() {  
    if (isEmpty()) 
    { 
     System.out.println("The Empty List Is Already Sorted"); 
    } 
    else if (first.next == null) { 
     System.out.println("One Element List Is Already Sorted"); 
    } 
    else { 
     Node current = first; 
     boolean swapDone = true; 
     while (swapDone) { 

      swapDone = false; 

      while (current != null) { 

       if (current.next != null && current.value.getScore() >      current.next.value.getScore()) { 

        Data temp = current.value; 
        current.value.setScore(current.next.value.getScore()); 
        current.value.setName(current.next.value.getName()); 
        current.next.value.setScore(temp.getScore()); 
        current.next.value.setName(temp.getName());       
       } 
       current = current.next; 
      } 
      current = first; 
     } 
    } 
+0

@Cyber​​neticTwerkGuruOrc我正在使用while,它是一樣的。 – user3337714

+0

@ user3337714你已經在外循環內設置了'swapDone = false'並且從不更新它。所以它會讓外層循環只運行一次。 – maxx777

回答

0

在第一次循環後,swapDone將始終爲假。您只需經過內環一次

+0

所以我想在交換後更新'if'語句中的swapDone,即 swapDone = true; @ maxx777和Fraser Price – user3337714

+0

您需要在內部循環結束時更新swapDone。如果該算法的傳遞沒有發生變化,則這應該是錯誤的(否則保持爲真)。 –

+0

此外,名稱swapDone具有誤導性。如果此值爲false,而不是true,則主循環將退出。 –

1

看看這個代碼,如果它的工作原理

public void bubbleSort() {  
    if (isEmpty()) 
    { 
     System.out.println("The Empty List Is Already Sorted"); 
    } 
    else if (first.next == null) { 
     System.out.println("One Element List Is Already Sorted"); 
    } 
    else { 
     Node current = first; 
     boolean swapDone = true; 
     while (swapDone) { 

      swapDone = false; 

      while (current != null) { 

       if (current.next != null && current.value.getScore() > current.next.value.getScore()) { 

        Data temp = current.value; 
        current.value.setScore(current.next.value.getScore()); 
        current.value.setName(current.next.value.getName()); 
        current.next.value.setScore(temp.getScore()); 
        current.next.value.setName(temp.getName());  
        swapDone=true;      
       } 
       current = current.next; 
      } 
      current = first; 
     } 
    } 
+0

如果我傳遞兩個數量 OBJ1:180 OBJ2:60 它打印 OBJ2:20 OBJ2:20 上面的代碼。 – user3337714

+0

和打印語句在哪裏?而且我還沒有提供代碼 – maxx777

+0

,而打印語句是用另一種方法運行的。這是我的代碼的方法之一。我幾乎無法弄清楚什麼是錯的。 – user3337714

0

這是工作的代碼。

public void bubbleSort() {  
if (isEmpty()) 
{ 
    System.out.println("The Empty List Is Already Sorted"); 
} 
else if (first.next == null) { 
    System.out.println("One Element List Is Already Sorted"); 
} 
else { 
    Node current = first; 
    boolean swapDone = true; 
    while (swapDone) { 

     swapDone = false; 

     while (current != null) { 

      if (current.next != null && current.value.getScore() > 
            current.next.value.getScore()) { 

       Data temp = current.value; 
       current.value = current.next.value; 
       current.next.value = temp; 
       swapDone = true;      
      } 
      current = current.next; 
     } 
     current = first; 
    } 
}