我正在使用下面链接的dualpivotquicksort算法。在数组大小达到100.000索引之前,一切正常。当我将大小设置为100.000并在数组中增加或减少数字时,我的程序崩溃并出现stackoverflow错误。使用随机数时没有问题,即使是长度为100.000的数组。https://cs.stackexchange.com/questions/24092/dual-pivot-quicksort-reference-implementation
void sort(int[] A, int left, int right) {
if (right > left) {
// Choose outermost elements as pivots
if (A[left] > A[right]) swap(A, left, right);
int p = A[left], q = A[right];
// Partition A according to invariant below
int l = left + 1, g = right - 1, k = l;
while (k <= g) {
if (A[k] < p) {
swap(A, k, l);
++l;
} else if (A[k] >= q) {
while (A[g] > q && k < g) --g;
swap(A, k, g);
--g;
if (A[k] < p) {
swap(A, k, l);
++l;
}
}
++k;
}
--l; ++g;
// Swap pivots to final place
swap(A, left, l); swap(A, right, g);
// Recursively sort partitions
sort(A, left, l - 1);
sort(A, l + 1, g - 1);
sort(A, g + 1, right);
}
}
void swap(int[] A, int i, int j) {
final int tmp = A[i]; A[i] = A[j]; A[j] = tmp;
}
暂无答案!
目前还没有任何答案,快来回答吧!