[英]Selection Sort in ArrayList of Integers w/o Collections.sort
[英]Selection Sort without collections.sort in ArrayList
因此,为什么此代码不起作用,却总是返回原始列表(我没有放入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;
}
}
您的swap(ArrayList<String> a, int index1, int index2)
方法创建局部变量i_string
和j_string
,然后交换它们。 这对输入List
a
的内容没有影响。
要更改List
a
的第i
个元素的值,必须调用a.set(i,newValue)
。
您可以自己实现swap方法,也可以使用现有的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);
}
}
}
}
如果您想学习如何正确实现swap
,可以看一下JDK实现:
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))
返回的值设置为List
的第i
个元素。 l.set(j, l.get(i))
将值l.get(i)
为List
的第j
个元素,并返回先前的第j
个元素。 因此,新的i
“中的第i个元素List
变成以前的j
”个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.