簡體   English   中英

數組上Java QuickSort中的堆棧溢出

[英]Stack Overflow in Java QuickSort on Array

有誰知道為什么我的快速排序中的以下代碼會導致堆棧溢出?

   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 ) );

   }

任何幫助將不勝感激。 我正在接受面試修改,有點生疏,所以時間很重要。 預先感謝! :)

真誠的,Piotr。

您的quickSort方法的遞歸是錯誤的。 它應該使用較小的數組(或使用其他變得更小的其他參數)而不是相同長度的數組來調用自身。 這就是為什么您會得到無限遞歸的原因,該遞歸顯示為StackOverflowError

我想知道您是否會永遠遞歸。 您在quicksort方法中在哪里縮小數組大小? 您是否在數組大小上使用println進行首次展示,以查看它是否變得越來越小?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM