2017-01-22 1 views
1

ArrayListを使用してJavaで選択ソートアルゴリズムを実装しています。 実装したアルゴリズムは正しいですが、有効な出力が得られません。 私はこのArraylistに間違っている場合は誰でも私を助けてくれることができます。 コード:ArrayListでこの選択ソートを解決するには

import java.util.*; 
public class SelectionSort { 
public static void main(String[] args) { 
    ArrayList <Integer> array = new ArrayList<Integer>(); 
    array.add(50); 
    array.add(30); 
    array.add(10); 
    array.add(60); 
    array.add(40); 
    System.out.println(array); 
    selsort(array); 

} 
private static ArrayList<Integer> selsort(ArrayList<Integer> array){ 
    int i = 0; 
    int imin = 0; 
    int len = array.size(); 
    for (i = 0;i <len-1; i++){ 
     imin = i; 
     for (int j = i+1; j<len; j++) { 
      if ((Integer) (array.get(j)) < (Integer) (array.get(imin))){ 
        imin = j; 
      } 
      Collections.swap(array,i,j); 
     } 
    } 
    System.out.println(array); 
    return array; 

} 
} 

出力:

[50、30、10、60、40] //前
[40、60、10、30、50] //後

答えて

2

間違った位置の間違ったインデックスで要素を交換しています。
正しいスワップはiiminです。

private static ArrayList<Integer> selsort(ArrayList<Integer> array){ 
    int i = 0; 
    int len = array.size(); 
    for (i = 0; i < len - 1; i++) { 
     int imin = i; 
     for (int j = i + 1; j < len; j++) { 
      if (array.get(j) < array.get(imin)) { 
       imin = j; 
      } 
     } 
     Collections.swap(array,i,imin);  
    } 
    System.out.println(array); 
    return array; 
} 

[50、30、10、60、40]
[10、30、40、50、60]

+0

おっと:
正しい場所は、内側ループの外側にあります..thanx @ luk2302 .... ohkあなたもキャスティングを外しました:) – minigeek

+0

@minigeekよろしくお願いします。はい、キャストは削除されました。なぜなら、あなたが取り出したものが何であれIntegerであることを保証するジェネリックArrayListがあるからです。 – luk2302

+0

それは私にエラーが表示されていた前に..ドンノなぜ..それはない – minigeek

関連する問題