对于以下快速排序算法:
import java.util.Scanner;
import java.util.ArrayList;
public class quick_sort_demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> my_arr = new ArrayList<Integer>();
while (true) {
System.out.println("Enter input value. '-1' to exit the adding process. ");
int val = sc.nextInt();
sc.nextLine();
if (val == -1) {
break;
} else {
my_arr.add(val);
}
}
quick_sort(my_arr);
}
public static ArrayList<Integer> quick_sort(ArrayList<Integer> arr) {
if (arr.size() <= 1) {
return arr;
}
int pivot_index = (int) (Math.random() * arr.size());
int pivot = arr.get(pivot_index);
ArrayList<Integer> left_arr = new ArrayList<Integer>();
ArrayList<Integer> right_arr = new ArrayList<Integer>();
for (int i = 0; i < arr.size(); i++) {
int element = arr.get(i);
if (element > pivot) {
right_arr.add(element);
} else {
left_arr.add(element);
}
}
left_arr = quick_sort(left_arr);
right_arr = quick_sort(right_arr);
ArrayList<Integer> result = new ArrayList<Integer>();
result.addAll(left_arr);
result.add(pivot);
result.addAll(right_arr);
return result;
}
}
我反复收到此错误:
Exception in thread "main" java.lang.StackOverflowError
at java.base/java.util.Random.next(Random.java:209)
at java.base/java.util.Random.nextDouble(Random.java:463)
at java.base/java.lang.Math.random(Math.java:865)
at quick_sort_demo.quick_sort(quick_sort_demo.java:23)
at quick_sort_demo.quick_sort(quick_sort_demo.java:35)
我对程序的具体输入如下:{6,15,32,643,6543,534232,232,-1}
我试着询问CHATGPT,但对于我遇到的特定错误,我无法得到有用的答案.我不明白为什么我会收到一个堆栈溢出错误,因为递归方法应该会毫无问题地调用自己,直到‘arr.size()’返回某个值<;=1.有人能解释一下我做错了什么吗?我的算法是错误的吗?为什么我会得到一个递归错误?