所以,为什么赢得这个代码工作它总是返回原始列表(我还没有把return语句,但有人可以确定为什么我的选择排序算法背后的逻辑不起作用)。任何帮助都将很高兴!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class ArrayListDemo {
public static void main(String [] args) {
ArrayList <String> list = new ArrayList <String> (15);
list.add("Wilson");
list.add("Annans");
list.add("Manning");
list.add("Branday");
list.add("Smittens");
list.add(2, "Goddard Fey");
list.set((list.size()) - 1, "Brand Brandon");
list.add("Brand Boarders");
selectionSort(list);
}
static void selectionSort(ArrayList<String> a) {
int smallindex;
for(int i = 0; i < a.size(); i++) {
smallindex = i; // set first element as smallest
for(int j = i + 1; j < a.size(); j++) { // find smallest
if (a.get(j).compareTo(a.get(smallindex)) > 0) {
swap(a, i, j);
}
}
}
}
static void swap(ArrayList<String> a, int index1, int index2) {
String i_string = a.get(index1);
String j_string = a.get(index2);
String temp = i_string;
i_string = j_string;
j_string = temp;
}
}
答案 0 :(得分:1)
您的swap(ArrayList<String> a, int index1, int index2)
方法会创建局部变量 - i_string
和j_string
- 然后交换它们。这对输入List
a
的内容没有影响。
要更改i
List
的{{1}}'元素的值,您必须致电a
。
您可以自己实施交换方法,也可以使用现有的a.set(i,newValue)
:
Collections.swap
如果您希望学习如何正确实现static void selectionSort(ArrayList<String> a) {
int smallindex;
for(int i = 0; i < a.size(); i++) {
smallindex = i; // set first element as smallest
for(int j = i + 1; j < a.size(); j++) { // find smallest
if (a.get(j).compareTo(a.get(smallindex)) > 0) {
Collections.swap(a, i, j);
}
}
}
}
,可以查看JDK实现:
swap
如您所见,此方法将public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
返回的值设置为l.set(j, l.get(i))
的新i
'元素。 List
将值l.set(j, l.get(i))
设置为l.get(i)
的新j
'元素,并返回先前的List
个元素。因此,j
的新i
元素成为之前的List
元素。