0
좋은 하루! 내 quickSort 알고리즘을 실행할 때 StackOverflowError
이 표시됩니다.많은 요소가있는 QuickSort가 StackOverflowError를 발생시킵니다
public void recQuickSort(int left, int right)
{
if(right-left <= 0)
return;
else {
long pivot = a[right];
int partition = partitionIt(left, right, pivot);
recQuickSort(left, partition-1);
recQuickSort(partition+1, right);
}
}
public int partitionIt(int left, int right, long pivot) {
int leftPtr = left - 1;
int rightPtr = right;
while (true) {
while (a[++leftPtr] < pivot) ;
while (rightPtr > 0 && a[--rightPtr] > pivot) ;
if (leftPtr >= rightPtr)
break;
else
swap1(leftPtr, rightPtr);
}
swap1(leftPtr, right);
return leftPtr;
}
public void swap1(int dex1, int dex2) // Permutation of two elements
{
long temp;
temp = a[dex1];
a[dex1] = a[dex2];
a[dex2] = temp;
}
가 어떻게이 오류 요소> 50 000을 수정할 수 있습니다 이 오류는 다음과 같습니다 배열> 50 000
내 코드에서 때 요소를 발생?
이것은 모든 리 커브 알고리즘에 내재 된 문제입니다. 결국 스택 메모리가 부족합니다. Java에 대한 부분적인 수정은 [here] (https://stackoverflow.com/questions/3700459/how-to-increase-the-java-stack-size)이지만 입력 크기가 충분히 크면 언제나 사용할 수 있습니다. StackOverflowException을 생성한다. – Turing85
당신은 재귀 함수를 사용하고 있으며 매번 입력을 반으로 분할합니다. '50,000' 엘리먼트를 사용하면'log_2 (50000) ~ = 16' 주위의 가장 좋은 스택 깊이를 볼 수 있습니다. 최악의 경우 스택 깊이는 '50000'입니다. 이것은 스택 오버 플로우에 매우 취약합니다. – hnefatl
가능한 [Java 스택 크기를 늘리는 방법] (https://stackoverflow.com/questions/3700459/how-to-increase-the-java-stack-size) – Turing85