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"]
您没有更新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)