如何在ArrayList中解析此选择排序

时间:2017-01-22 12:24:07

标签: java arraylist selection-sort

我正在使用ArrayList在java中实现选择排序算法。 我实现的算法是正确的,但我没有得到有效的输出。 如果我对这个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] //

之后

1 个答案:

答案 0 :(得分: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]