QuickSort代码中的java.lang.StackOverflowError

时间:2017-12-10 07:25:12

标签: java stack-overflow quicksort

我为QuickSort写了这个方法:

public static void QuickSort(int f, int l, int a[]) 
// f, when passedfrom a method at first is equal to the first index of 
//the array, while l is the last. So if I'm passing an array of length 
//10, f=0 and l=9
{
int temp;
int mid= (int)(l+f)/2;
  for (int r=f; r<l; r++)
{ 
   if(a[r]<a[mid] && r>mid)
   {
       temp=a[r];
       a[r]=a[mid+1];
       a[mid+1]=a[mid];
       a[mid]=temp;
       mid=mid+1;

   }
   else if(a[r]>a[mid] && r<mid)
   {
       temp=a[r];
       a[r]=a[mid-1];
       a[mid-1]=a[mid];
       a[mid]=temp;
       mid=mid-1;

   }
}
  if((checksortasc(a))==false)
 {
   QuickSort(f, mid-1, a);// Exception
   QuickSort(mid+1 ,l, a);
 }
 else
  {
   for(int r=0; r<10; r++)
       System.out.println(a[r]);
   System.exit(0);

 }
}
  public static boolean checksortasc(int a[])
{ 
for(int i=0;i<a.length-1;i++){
    if(a[i]<=a[i+1])
        continue;

    return false;
}
return true;
}
}

这给了我:

  

线程“main”中的异常java.lang.StackOverflowError

在我标有上述评论的行上。 为什么抛出此异常,我该怎么做才能修复我的代码? 我是新手,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是使用checksortasc,每次都会返回false。

快速排序的逻辑是将数组分成两部分,下部的每个元素都比较高的部分小。然后,如果每个部分都长于1,则对每个部分应用相同的过程。

请注意,在第一次分离后,数组仍未排序。特别是,上半部分尚未排序,因此您的算法将在您评论的行中继续递归,因为checksortasc一直返回false。

检查lf之间的区别;如果小于或等于1,则停止递归。