【问题标题】:How to resolve this selection sort in ArrayList如何在 ArrayList 中解决此选择排序
【发布时间】:2017-06-07 01:08:48
【问题描述】:

我正在使用 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] //之后

【问题讨论】:

    标签: java arraylist selection-sort


    【解决方案1】:

    您在错误的位置用错误的索引交换元素。
    正确的交换是 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]

    【讨论】:

    • @minigeek 欢迎您。是的,我确实删除了强制转换,因为它不需要,因为你有一个通用的 ArrayList,它确保你取出的任何东西都是Integer
    • 它之前显示错误..不知道为什么..现在不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2013-11-06
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多