java - Java 数组快速排序中的堆栈溢出

标签 java arrays stack-overflow 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 ) );

   }

任何帮助将不胜感激。我正在为面试而复习,有点生疏,所以时间非常重要。预先感谢! :)

真诚的, 彼得。

最佳答案

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

关于java - Java 数组快速排序中的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083686/

相关文章:

java - CipherOutputStream 与 rsa 一起使用

java - 在 String 之前将 int 数组转换为 char

arrays - 设置名词集时,如何在 Bash 中将 "-@-expand ("${array[@]}") 可能为空数组?

scheme - 什么输入会导致这个函数不终止?

java - JPA一对多双向堆栈溢出问题

java - 为什么在应该返回简短工作的方法中返回 int?

java - 从javamail读取需要很长时间

java - 如何在 hibernate 中调用程序?

java - 当特定对象特定字段的实例通过时如何 stub 方法?

php显示多数组的一部分