使用quickSort时得到stackoverflower错误,我可以增加堆栈和堆吗?

我可以在java中增加堆栈和堆吗? 我正在使用BlueJ。

========

编辑:

这是代码:

// ***** Quick-Sort Method ***** public static void quickSort(int[] data, int first, int n) { int p, n1, n2; if(n > 1) { p = partition(data, first, n); n1 = p - first; n2 = n - n1 - 1; quickSort(data, first, n1); quickSort(data, p+1, n2); } } // ***** PRIVATE HELPER FUNCTIONS ***** public static void quickSort(int[] data) { quickSort(data, 0, data.length); } private static int partition(int[] A, int first, int n ) { int right = first + n - 1; int ls = first; int pivot = A[first]; for(int i = first+1; i <= right; i++) { if(A[i] <= pivot) // Move items smaller than pivot only, to location that would be at left of pivot { ls++; swap(A, i, ls); } } swap(A, first, ls); return ls; } private static void swap(int[] data, int pos1, int pos2) { int temp = data[pos1]; data[pos1] = data[pos2]; data[pos2] = temp; } 

您可以使用以下JVM选项:

  • -Xms初始java堆大小
  • -Xmx最大java堆大小
  • -Xss设置线程堆栈大小

如果要在BlueJ中默认设置这些选项,则需要执行以下操作:

  • 找到bluej.defs文件
  • 在该文件中找到bluej.vm.args属性(行)
  • 在该行中添加所需的选项,即bluej.vm.args = -Xmx512m以将堆大小设置为最大512 MB。

我希望这有帮助。

试图通过溢出来增加堆栈大小,就像购买更多的垃圾箱,当你的垃圾箱已满而不是把它带到垃圾场。

最有可能的是你进入无休止的递归。 你能发贴你的代码吗?

stackoverflow错误通常是由于错误的递归调用。 你确定你没有做任何错误,比如为你的递归流指定正确的退出路径(也就是终止条件)?

对我来说,它看起来像是分区的错误

 private static int partition(int[] A, int first, int n ) { int right = first + n-1; int ls = first; int pivot = A[right];//use right most for pivot for(int i = first;i 

我从维基百科得到了这个代码

Quicksort的最简单实现在最坏的情况下易受O(N)内存使用的影响。 在最坏的情况下,可以通过递归到较小的子数组并将剩余的递归转换为while循环来修改它以使用O(log N):

 //the following code probably contains of-by-one errors quicksort(xs, begin, end): while(not empty list){ mid = partition(xs, begin, end) if( mid-begin < end-mid){ quicksort(xs, begin, mid) end = mid }else{ quicksort(xs, mid, end) begin = mid }