Я неоднократно получаю ошибку StackOverflow в строке, помеченной ** Переполнение стека, если я пытаюсь отсортировать более трех чисел, но работает для массивов 3 или менее, поэтому я не думаю, что существует бесконечная рекурсия. Может кто-нибудь объяснить мне, почему строка 246, кажется, является источником переполнения стека?Ошибка Heapsort StackOverflow
Благодаря
public static void heapSort(double [] a,int node, int index, boolean upcheck){
if(node < 0){
}
else if(node > a.length-index){
}
else if(upcheck){
if(!testHeap(a,node,(2*node)+1) || !testHeap(a,node,(2*node)+2)){
int min = 0;
if(a[(2*node)+1] > a[(2*node)+2]){
min = (2*node)+2;
}
else{
min = (2*node)+1;
}
switchHeap(a,node,min);
****************************heapSort(a,(node-1)/2,index,true);*********************
}
}
else if(node == (a.length-index-1)/2){
if((2*node)+1 <= a.length-index){
if(testHeap(a,node,(2*node)+1)){
}
else{
heapSort(a,(node-1)/2,index,true);
}
if((2*node)+2 <= a.length-index){
if(testHeap(a,node,(2*node)+2)){
}
else{
heapSort(a,(node-1)/2,index,true);
}
}
}
switchHeap(a,0,a.length-index);
index++;
heapSort(a,0,index,false);
}
else{
if((2*node)+1 <= a.length-index){
if(testHeap(a,node,(2*node)+1)){
}
else{
heapSort(a,(node-1)/2,index,true);
}
heapSort(a,(2*node)+1,index,false);
if((2*node)+2 <= a.length-index){
if(testHeap(a,node,(2*node)+2)){
}
else{
heapSort(a,(node-1)/2,index,true);
}
heapSort(a,(2*node)+2,index,false);
}
}
}
}//heapSort - method
вы получаете StackOverflowError, когда ваш стек полон (в вашем случае его из-за рекурсии ..). – TheLostMind
Спасибо, я понимаю, как это вызвано, но я не могу найти причин, почему код должен вызывать stackoverflow. Стек (я думаю) не больше, чем дерево. –