Java列表/递归错误
Java新手。我正在阅读一本书,其中一个例子是关于quicksort的,它的效果很好。我理解这个算法,但想在每次递归之前打印数组,以真正了解较低和较高数组的情况 我想我只需要声明一个单独的列表,并用较低、枢轴和较高的值填充它,但它似乎放弃了所有的功能。递归似乎保持不变,但实际上没有排序。因此,它溢出并退出 我几乎可以肯定,这里缺少一个基本的Java概念 除了写在评论里的台词外,其他的都是从书中摘取的。注释行之间的行是我自己的Java列表/递归错误,java,recursion,quicksort,Java,Recursion,Quicksort,Java新手。我正在阅读一本书,其中一个例子是关于quicksort的,它的效果很好。我理解这个算法,但想在每次递归之前打印数组,以真正了解较低和较高数组的情况 我想我只需要声明一个单独的列表,并用较低、枢轴和较高的值填充它,但它似乎放弃了所有的功能。递归似乎保持不变,但实际上没有排序。因此,它溢出并退出 我几乎可以肯定,这里缺少一个基本的Java概念 除了写在评论里的台词外,其他的都是从书中摘取的。注释行之间的行是我自己的 package quicksort; import java.uti
package quicksort;
import java.util.ArrayList;
import java.util.List;
public class App {
public static List<Integer> quicksort(List<Integer> numbers){
if (numbers.size() < 2){
return numbers;
}
final Integer pivot = numbers.get(0);
final List<Integer> lower = new ArrayList<>();
final List<Integer> higher = new ArrayList<>();
for (int i = 1; i < numbers.size(); i++){
if (numbers.get(i) < pivot){
lower.add(numbers.get(i));
}
else{
higher.add(numbers.get(i));
}
}
// Makes things go all squirrrrrrrrely
final List<Integer> notYetSorted = lower;
notYetSorted.add(pivot);
notYetSorted.addAll(higher);
System.out.println("During: " + notYetSorted);
// -------------
final List<Integer> sorted = quicksort(lower);
sorted.add(pivot);
sorted.addAll(quicksort(higher));
return sorted;
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
intList.add(5);
intList.add(8);
intList.add(2);
intList.add(9);
intList.add(10);
intList.add(3);
intList.add(4);
intList.add(7);
intList.add(1);
intList.add(6);
System.out.println("Before: " + intList);
System.out.println("After: " + quicksort(intList).toString());
}
}
包快速排序;
导入java.util.ArrayList;
导入java.util.List;
公共类应用程序{
公共静态列表快速排序(列表编号){
if(number.size()<2){
返回号码;
}
最终整数pivot=numbers.get(0);
最终列表下部=新的ArrayList();
最终列表更高=新的ArrayList();
对于(int i=1;i
您的问题出现在本模块的开头:
final List<Integer> notYetSorted = lower;
notYetSorted.add(pivot);
notYetSorted.addAll(higher);
System.out.println("During: " + notYetSorted);
// -------------
final List<Integer> sorted = quicksort(lower);
一切都应该很好。请提及输出中的所有错误。这会在线程“main”java.lang.StackOverflowerr中出现一个-
异常。另外,请用文字说明步骤。您也可以执行intList.addAll(Arrays.asList(5,8,2,9,10,3,4,7,1,6)),而不是将每个数字单独添加到列表中代码>波拉特-今后我会记住这一点。谢谢范德尔-我想知道是否有类似的事情发生。非常感谢你的建议。
final List<Integer> notYetSorted = new ArrayList<>(lower);