我正在制作一个关于堆排序的简单程序。请查看我的代码,让我知道我的错误。也许我正在使用错误的方法。提前致谢。
insert方法有两个参数。整数键是我需要插入的元素,而Integer i是另一个数组中键的索引(即Main类)。
public static void main(String[] args) {
Integer arr[]={81,67,78,59,32,8,96};
Main a =new Main();
for(int i=0;i<arr.length;i++)
{
a.insert(arr[i], i);
}
public void insert(Integer key, Integer i) {
int head=0;
if(temp[head]==null)
{
temp[head]=key;
}
else
{
if(key>=temp[head]){
Integer j=(2*i)+2;
i=j;
insert(key, i);
}
else
{
Integer j=(2*i)+1;//Stackoverflow error is coming over here.
i=j;
insert(key,i);
}
}
}
答案 0 :(得分:0)
似乎除了第一个元素之外,插入另一个元素会导致你的方法继续调用自己,因为你的所有执行路径都会导致再次调用该方法,但是当元素为0时会有异常是空的。
答案 1 :(得分:0)
一旦temp [0]不为null并且键大于或等于temp [0],就会遇到无限递归。