排序算法中的这个StackOverflowError 怎么改 谢谢!

dreamzhenzhen 2013-07-09 05:45:00
一个快速排序的程序,编译后出错。error如下,不知道怎么改。请大家帮忙提示一下 怎么改我的程序。非常感谢!
Exception in thread "main" java.lang.StackOverflowError
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:13)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)
at org.quicksortprac.kql.QuickSort1.<init>(QuickSortApp1.java:18)

代码如下:
/* Quick Sort Practice
*
*/
package org.quicksortprac.kql;

class QuickSort1{ // constructor
int[] Arr;
int p;
int r;
int q;
QuickSort1 qks;

public QuickSort1(int[] arr){
Arr = arr;
p=0;
r= arr.length-1;
q=0;
qks = new QuickSort1(arr);
}
public void sortingArray(int[] arr, int p, int r){
QuickSort Q = new QuickSort(arr);
q = qks.partition(p, r);
Q.sortingArray(arr, q+1, r);
Q.sortingArray(arr, q+1, r);
}
//------------------------------------
public int partition(int p, int r){
int i, j;
i= p-1;
for(j=p; j<r; j++){
if(Arr[j]<Arr[r]){
i++ ;
int tp = Arr[i]; // A[i] <---> A[j]
Arr[i] = Arr[j];
Arr[j]= Arr[tp];
}
}
int temp = Arr[i+1];
Arr[i+1] = Arr[j];
Arr[j] = temp;
return i+1;
}// end method
//-----------------------------
} // end classQuickSort
//================================================
public class QuickSortApp1 {
public static void main(String[] args) {
int[] A = {2, 5, 71, 23, 13, 3, 4, 9, 30};
QuickSort sort = new QuickSort(A);
sort.sortingArray(A, 0, A.length-1);
for(int i=0; i<A.length-1; i++){
System.out.print(A[i]+" ");
}
System.out.println();
}
}
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamzhenzhen 2013-07-12
  • 打赏
  • 举报
回复
谢谢楼上各位热心回答我的问题。 经过修改我的程序已经可以正确运行了。
dreamzhenzhen 2013-07-12
  • 打赏
  • 举报
回复
引用 5 楼 longtian1213 的回复:
[quote=引用 3 楼 dreamzhenzhen 的回复:] 我也知道 程序初始化这部分有问题了 可以具体说一下怎么改么 谢谢
试试去掉qks的声明 然后把这句q = qks.partition(p, r);改成q = this.partition(p, r);[/quote] 谢谢你的回复,虽然这个方法最终没有解决我的问题,但是让我学到了新的知识。非常感谢。
dreamzhenzhen 2013-07-11
  • 打赏
  • 举报
回复
我也知道 程序初始化这部分有问题了 可以具体说一下怎么改么 谢谢
S117 2013-07-11
  • 打赏
  • 举报
回复
引用 3 楼 dreamzhenzhen 的回复:
我也知道 程序初始化这部分有问题了 可以具体说一下怎么改么 谢谢
试试去掉qks的声明 然后把这句q = qks.partition(p, r);改成q = this.partition(p, r);
S117 2013-07-11
  • 打赏
  • 举报
回复
程序死循环吧!递归用的有问题,构造函数中new自己,改下程序吧!
oh_Maxy 版主 2013-07-10
  • 打赏
  • 举报
回复
LS说的有道理。 任何递归的东西,都要有个收敛的条件。建议LZ可以加个size参数,当size为0就不new了
花木兰1闪21A 2013-07-10
  • 打赏
  • 举报
回复
  public QuickSort1(int[] arr){        Arr = arr;        p=0;        r= arr.length-1;        q=0;        qks = new QuickSort1(arr);    }
这里qks在构造函数中new 自己,相当于无限new 自己,死递归了...

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧