2013-09-21 65 views
0

我想通過實現一個類似的算法來排序數組,我已經用來排序數組。我知道我可以使用Collects.sort,但由於我仍然是初學者,我寧願寫代碼並學習它。比較存儲在數組列表中的兩個整數對象的值。這是我的代碼,通過引用此方法將scores數組作爲參數傳遞。此時此代碼不能正確排序,而是在所有下標中插入數組中的最小數字。在一個側面說明我很好奇,我如何比較索引j和索引最小的分數與compareTo()方法,因爲我比較的是對象而不是基元,我覺得它比解決方案更好。謝謝!排序ArrayList與陣列相同Algo

 int smallest; 
    for (int i = 0; i < 5; i++) 
    { 
     smallest = i; 
     for (int j = i; j < scores.size(); j++) 
     { 
      if ((Integer) scores.get(j) < (Integer) scores.get(smallest)) 
       smallest = j; 
     } 

     int temp = (Integer) scores.get(i); 
     int swap = (Integer) scores.get(smallest); 
     scores.add(i, swap); 
     scores.add(smallest, temp); 

    } 
+0

排序使用集合接口列表中。 –

回答

0

眼下這個代碼不正確排序,而是將所有標陣列中的最低數量。

您需要使用set()方法代替add()來替換元素。

在一個側面說明我很好奇,因爲我比較對象不是基元,我覺得這將是一個更好的解決方案比鑄造

我能如何比較的指標j和指數最小與的compareTo()方法的分數

您可以通過爲集合指定explit類型來避免輕鬆投射,如new ArrayList<Integer>

收集所有聚集在這裏的更正後的代碼:

ArrayList<Integer> scores = new ArrayList<Integer>(); 
    scores.add(5); 
    scores.add(4); 
    scores.add(2); 
    scores.add(1); 
    scores.add(3); 
    System.out.println(scores); 
    int smallest; 
    for (int i = 0; i < scores.size(); i++) 
    { 
     smallest = i; 
     for (int j = i; j < scores.size(); j++) 
     { 
      if (scores.get(j) < scores.get(smallest)) 
       smallest = j; 
     } 

     int temp = scores.get(i); 
     int swap = scores.get(smallest); 
     scores.set(i, swap); 
     scores.set(smallest, temp); 

    } 
    System.out.println(scores); 
+0

謝謝!非常感激。 – user2771729

+0

請將回答標爲已接受 – Jk1