2017-01-22 24 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歡迎您。是的,我確實刪除了這個演員,因爲它沒有必要,因爲你有一個通用的ArrayList,可以確保你無論如何都可以使用'Integer'。 – luk2302

+0

它顯示我錯誤之前... donno爲什麼..現在不是 – minigeek