2017-04-03 71 views
0

我目前正在嘗試編寫java中節點的選擇排序。 我也編寫了一個完美的氣泡排序,但由於某種原因選擇排序不起作用。我對java很陌生,所以請原諒我沒有發現錯誤。節點上的選擇排序 - java

我的選擇排序實際上排序的一切。結果很好。但執行不是選擇排序應該如何工作。

首先我切換節點而不是價值,它的工作,但不是它應該的。所以我想出瞭解決方案,讓Node離開它,然後切換值。

public void selectionSort() { 
    for (IntegerNode i = first; i != null; i = i.nextNode) { 
     for (IntegerNode j = i.nextNode; j != null; j = j.nextNode) { 
      if (i.value > j.value) { 
       int temp = i.value; 
       i.value = j.value; 
       j.value = temp; 
      } 
     } 
    } 
} 

因此,它第一次真正做它應該做的。它切換地點。但在此之後,它將採用最小的int值,並將其放在較大的int前面,而不是切換它。我會告訴你一個例子輸出

未分類:

2, 9, 7, 6, 3, 1, 5, 8, 

開始進行排序:

1, 9, 7, 6, 3, 2, 5, 8, 
1, 2, 9, 7, 6, 3, 5, 8, 
1, 2, 3, 9, 7, 6, 5, 8, 
1, 2, 3, 5, 9, 7, 6, 8, 
1, 2, 3, 5, 6, 9, 7, 8, 
1, 2, 3, 5, 6, 7, 9, 8, 
1, 2, 3, 5, 6, 7, 8, 9, 

排序:

1, 2, 3, 5, 6, 7, 8, 9, 

//你可以在第1行看到 - 它切換2與5,正是選擇應該做什麼。 //第二行+ - 它只需要小的整數,並把它放在更大整數的infront。

這是我的第一個問題,我希望我給了足夠的代碼。如果您需要更多,只需添加評論!提前致謝。

回答

0

你應該嘗試用你的算法來瀏覽你的數據集。

基本上你所看到的問題是,如果j小於i的當前值,我的值將總是與下一個元素j交換。

所以在開始進行排序的第1行(I = 1,J = 2):

9> 7 - >交換這些:1,,,6個,3個,2 ,5,8, - > 1,,,6,3,2,5,8,

7> 6 - >交換這些:1,,9, ,3,2,5,8, - > 1,,9,,3,2,5,8

6> 3 - >交換這些:1,,9,7,,2,5,8 - > 1,,9 7,,2,5,8

3> 2 - >交換這些:1,,9,7,6,,5,8 - > 1, ,9,7,6,,5,8

不再掉期,增加i。

取而代之,嘗試更新您的算法以便僅在找到最小項目時進行交換。

+0

Thanks!我現在知道了。我完全搞砸了選擇排序。 –

0

我用選擇排序錯誤。一個基本的錯誤..對於那些好奇它是如何看起來是正確的:

public void selectionSort() { 
    for(IntegerNode i = first; i != null; i = i.nextNode){ 
     IntegerNode smallestElement = i; 
     for (IntegerNode j = i.nextNode; j != null; j = j.nextNode){ 
      if(smallestElement.value > j.value){ 
       smallestElement = j; 
      }    
     } 
     int temp = i.value; 
     i.value = smallestElement.value; 
     smallestElement.value = temp; 
    } 
}