2013-10-08 143 views
0

所以我正在写一个程序,将使用快速排序字符串的自定义数组列表。 (我必须自定义编写一个类的所有代码)。但是,我不断收到堆栈溢出错误,我不知道为什么。 (我是一个初学者,所以很容易)。Java堆栈与递归溢出

void quickSort() { 
    recursiveQuickSort(0, numElements-1); 
} 
// Recursive quicksort 
public void recursiveQuickSort(int start, int end) { 
    // if size 1 or less, don't need to do anything 
    int pivotPosition = 0; 
    if (start <=1 || end <= 1) { 

    } else 
     pivotPosition =partition(start, end); 
     recursiveQuickSort(start, pivotPosition-1); 
     recursiveQuickSort(pivotPosition+1, end); 
} 
static int partition(int start, int end) { 
    int pivot = end; 
    end--; 
    while(true) { 
     while (true) { 
      if (end < start) { 
       break; 
      } 
      if (end < pivot) { 
       end = end; 
       break; 
      } else end --; 
     } 
     while(true) { 
      if (end < start) { 
       break; 
      } 
      if (start > pivot) { 
       start = start; 
       break; 
      } else start++; 
     } 
     if(end < start) { 
      break; 
     } 
     else 
      swap(start, end); 
    } 
      swap(end+1, pivot); 
    return end + 1; 
} 

回答

1

您在recursiveQuickSortelse缺少大括号,这样循环调用无条件地执行。

添加花括号来解决这个问题:

public void recursiveQuickSort(int start, int end) { 
    // if size 1 or less, don't need to do anything 
    int pivotPosition = 0; 
    if (start <=1 || end <= 1) { 

    } else { // <<== Here 
     pivotPosition =partition(start, end); 
     recursiveQuickSort(start, pivotPosition-1); 
     recursiveQuickSort(pivotPosition+1, end); 
    }  // <<== Here 
}