Stack Overflow in Java QuickSort on Array
Does anyone have any idea why I would 开发者_StackOverflowbe getting a stack overflow on my quicksort in the following code?:
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 ) );
}
Any help would be greatly appreciated. I am revising for an interview and been a little rusty so time is of grave importance. Thanks upfront! :)
Sincerely, Piotr.
Your quickSort
method's recursion is wrong. It should call itself with smaller arrays (or with some other parameter which gets smaller), not with arrays of the same length. This is why you get an endless recursion, which shows up as a StackOverflowError
.
I wonder if you're recursing forever. Where do you shrink the array size within your quicksort method? Have you used println's on the array size to debut to see if it's getting smaller?
精彩评论