数组Java QuickSort中的堆栈溢出

时间:2011-05-21 18:38:32

标签: java arrays stack-overflow quicksort

有没有人知道为什么我会在以下代码中的quicksort上出现堆栈溢出?:

   private int[] concat( int[] less, int inxl, int pivot, int inxm, int[] more )
   {

      int[] concated = new int[ less.length ];

      for( int inx = 0; inx < inxl; inx++ )
      {

         concated[ inx ] = less[ inx ];

      }

      concated[ inxl ] = pivot;
      inxl++;

      for( int inx = 0; inx < inxm; inx++ )
      {

         concated[ inxl ] = more[ inx ];
         inxl++;

      }      

      return concated;

   }

   private int[] quickSort( int[] array )
   {

      if( array.length <= 1 )
         return array;

      int[] less = new int[ array.length ];
      int[] more = new int[ array.length ];
      int inxl = 0, inxm = 0;

      for( int inx = 1; inx < array.length; inx++ )
      {

         if( array[ inx ] < array[ 0 ] )
         {

            less[ inxl ] = array[ inx ];
            inxl++;

         }
         else
         {

            more[ inxm ] = array[ inx ];
            inxm++;

         }

      }

      return concat( quickSort( less ), inxl, array[ 0 ], inxm, quickSort( more ) );

   }

非常感谢任何帮助。我正在修改面试并且有点生疏,所以时间非常重要。先谢谢! :)

此致 彼得。

2 个答案:

答案 0 :(得分:6)

您的quickSort方法的递归错误。它应该使用较小的数组(或者使用其他一些较小的参数)调用自身,而不是使用相同长度的数组。这就是为什么你得到一个无休止的递归,它显示为StackOverflowError

答案 1 :(得分:0)

我想知道你是否会永远复仇。在quicksort方法中,您在哪里缩小数组大小?您是否已使用阵列尺寸上的println进行首次亮相以查看它是否变小?