使用quickSort时出现stackoverflowerror,我可以增加堆栈和堆吗?

| 我可以在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
属性(行) 在该行中添加所需的选项,即“ѭ6”,以将堆大小设置为最大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<right;i++)
    {
        if(A[i]<pivot){
           swap(A,i,ls);
           ls++;//inc after swap
        }

    }
    swap(A,right,ls);
    return ls;
}
我从维基百科得到了这段代码     
在最坏的情况下,Quicksort的最简单实现容易受到O(N)内存使用的影响。可以将其修改为在最坏的情况下使用O(log N),方法是仅递归到较小的子数组,然后将剩余的递归转换为while循环:
//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
        }
    

要回复问题请先登录注册