【发布时间】:2018-11-26 05:37:40
【问题描述】:
我需要实现这个算法,在每次递归调用时创建一个新的 ArrayList 对象。
我的起始数组包含这个顺序的整数"20, 40 ,10, 30 ,50 ,5" ,排序后我有5,5,5,5,5,5。我认为问题出在递归调用和 SelectionSort 的最后一个 for cicle 中,因为删除最后一个 for 我注意到第一个元素的排序正确。
import java.util.*;
public class SelectionSort {
//var
public ArrayList<Integer> arr ;
//constructor
public SelectionSort(ArrayList<Integer> arr){
this.arr = arr;
}
public ArrayList<Integer> getarraylist() {
return arr;
}
public void sort(){
//position of the last sorted element
int minimum =0;
if (arr.size() <=0 ) return;
for ( int j = 1; j < arr.size()-1; j++ ) {
if (arr.get(j) < arr.get(0) ) {
minimum = j;
//swap element 0 and minimum
int temp = arr.get(0);
arr.set(0, arr.get(minimum));
arr.set(minimum, temp);
}
}
//recursive call, new array without first element (already sorted)
ArrayList<Integer> arr2 = new ArrayList<>(arr.subList(1,arr.size()));
SelectionSort s2 = new SelectionSort(arr2);
s2.sort();
for(int i=0;i<s2.getarraylist().size();i++) {
arr.set(i, s2.getarraylist().get(i));
}
}
驱动类
public class Main {
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer (Arrays.asList(20,40,10,30,50,5));
System.out.println("\n ARRAY ELEMENTS \n ");
for (int i: arr) {
System.out.println(i);
}
System.out.println("\n SORTED ELEMENTS \n ");
SelectionSort s = new SelectionSort(arr);
s.sort();
for (int i: s.getarraylist()) {
System.out.println(i);
}
}
}
【问题讨论】:
-
您能否举一个输入/输出示例来说明它是如何错误排序的?
-
谢谢@GBlodgett 我的起始数组按此顺序包含整数"20, 40 ,10, 30 ,50 ,5" ,排序后我有 "5,5,5,5,5,5 " 我认为问题出在“SelectionSort”类的 cicle 的最后一个
-
请edit您的问题并添加此信息。
-
@Turing85 我不知道为什么您关于“set”方法的最后回复似乎消失了。无论如何 Eclipse 报告了这个方法:“用指定的元素替换这个列表中指定位置的元素”
标签: java sorting recursion arraylist selection-sort