Java ArrayList字符串选择排序

use*_*723 3 java arraylist selection-sort

我正在努力在字符串的ArrayList上进行选择排序以按字母顺序排列它们.我不知道我做错了什么.但它对我来说不合适.继承我的代码.

    ArrayList<String> list = new ArrayList<String>();
    list.add("a");
    list.add("d");
    list.add("f");
    list.add("c");
    System.out.println(list);
    int i;
    int j;
    int minValue;
    int minIndex;

    for (i=0; i<list.size(); i++) {
        System.out.println(list.get(i));
        char iLetter = (list.get(i).charAt(0));
        int iValue = (int) iLetter;
        minValue = iValue;
        minIndex = i;
        for(j=i; j<list.size(); j++) {
            char jLetter = list.get(j).charAt(0);
            int jValue = (int) jLetter;
            if (jValue < minValue) {
                minValue = jValue;
                minIndex = j;
            }
        }
        if(minValue < iValue) {
            int temp = iValue;
            char idx = list.get(minIndex).charAt(0);
            int idxValue = (int) idx;
            iValue = idxValue;
            idxValue = temp;

        }
    }
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

它仍然将其打印为["a","d","f","c"]

Era*_*ran 5

您没有更新list循环中的任何位置,因此它仍然未排序.

为了实际交换列表的元素,请替换:

if(minValue < iValue) {
    int temp = iValue;
    char idx = list.get(minIndex).charAt(0);
    int idxValue = (int) idx;
    iValue = idxValue;
    idxValue = temp;
}
Run Code Online (Sandbox Code Playgroud)

有:

if(minValue < iValue) {
    Collections.swap (list, i, minIndex);
}
Run Code Online (Sandbox Code Playgroud)

Collections.swap 执行以下修改:

list.set(i, list.set(minIndex, list.get(i)));
Run Code Online (Sandbox Code Playgroud)

现在输出将是

[a, c, d, f]
Run Code Online (Sandbox Code Playgroud)