java程序错误,错误提示是栈溢出.

Python013

java程序错误,错误提示是栈溢出.,第1张

private static void qsort(int[]a,int low,int high)

{

int pos=Qpass(a, low, high)

qsort(a,low,pos-1)

qsort(a,pos+1,high)

}

没有结束条件,肯定会一致无限地递归下去,直到栈溢出了。。

快速排序的终止条件是:low>=high

即改为

private static void qsort(int[]a,int low,int high)

{

if( low <high)

{

int pos=Qpass(a, low, high)

qsort(a,low,pos-1)

qsort(a,pos+1,high)

}

}

栈溢出。Java里面每个线程都有独立的、固定大小的栈空间, Java在解释执行的时候采用的是栈式的架构。 方法调用、方法内的局部变量都是在栈空间申请的。 空间的大小依赖于JDK版本,JDK1.6应该是512K,超过了这个空间就会产生StackOverFlow。

死循环本身是不会StackOverflow的,只有无限递归的时候会出现。原则上循环嵌套次数本身是没有限制的,限制的是占用的栈空间,如果你的方法里定义了很多很多变量,栈空间就会用完得比较快。如果你的软件不是很庞大,那么你的程序中出现了无限的递归的情况可能产生这个错误。

1. 应该是您的递归算法调用的层级太多导致的。优化下算法,让调用层级减低才行。

2. 这种情况自己维护个栈序列,用循环的方式来处理应该就可以了。

例如可以是:

1. (start,end)入栈

2. 栈是否为空,若为空则退出

3. 弹出栈定元素,如果start-end<breakpoint使用插入排序,完成后回到2。

否则对[start,end]序列进行划分,将小于和大于choosePivot(a,start,end)的区间入栈

(minstart,minend), (maxstart, maxend)

4. 重复2,3,直到栈为空