【发布时间】:2013-06-14 06:40:29
【问题描述】:
已解决:我在每次递归调用时都实例化一个新的 Random 对象。我把它作为一个静态变量放在 Quicksort 之外,现在它工作得很好。
我正在使用 Java 编写 Quicksort 以完成学校作业,但我被卡住了。我正在使用Random 类中的nextInt() 方法随机选择枢轴。这意味着我在每个递归步骤中都调用nextInt()。
我的快速排序在具有 20000 个元素的数组中完美地完成了这项工作。但是当我尝试对一个包含 40000 个元素的数组进行排序时,会出现这个 StackOverflowError
java.lang.StackOverflowError: null (in java.util.Random)
我在 google 上搜索过这个错误,但对我没有任何帮助。我的猜测是我用完了随机整数,但我在 java 中太菜鸟了,我什至不买我自己的猜测。
这是我的代码(西班牙语是我的第一语言,对于蹩脚的英语和西班牙语代码感到抱歉)
public static void quicksort(String[] A, int min, int max){// llamar ord(A, 0, n-1);
if(min >= max){
return;
}
Random rand = new Random();
int pivote = particionar(A, min, max, rand);
quicksort(A, min, pivote-1);
quicksort(A, pivote + 1, max);
}
public static int particionar(String[] A, int min, int max, Random rand){
int menores = min + 1;
int mayores = max;
int pivote = rand.nextInt(max-min+1) + min;
String pivotstr = A[pivote];
//dejar pivote al principio
String aux = A[min];
A[min] = A[pivote];
A[pivote] = aux;
while(menores <= mayores){
if(A[menores].compareTo(pivotstr) <= 0){
menores++;
}
else{//intercambiar
String aux2 = A[menores];
A[menores] = A[mayores];
A[mayores] = aux2;
mayores--;
}
}
//mover pivote donde corresponde
String aux3 = A[min];
A[min] = A[mayores];
A[mayores] = aux3;
return mayores;
}
【问题讨论】:
-
我想说的是,在 StackOverflow 上实际发布任何内容之前,您可能应该阅读“StackOverflow 错误”的真正含义......
标签: java random pivot quicksort stack-overflow