混合快速排序法中breakpoint如果小于或等于数组长度时,就用插入排序法
public static void hybridQuickSort(int[] a, int start, int end, int breakpoint )
{
intPair pivotPosn;
pivotPosn = new intPair(0,0);
if((end-start)<=breakpoint)
{
insertionSort(a,start,end);
}
else
{
choosePivot(a,start,end);
pivotPosn = partitionWithDuplicates(a, start, end);
hybridQuickSort(a,start,pivotPosn.getEqualsStart(),breakpoint);
hybridQuickSort(a,pivotPosn.getBigsStart(),end,breakpoint);
}
}
这只是部分代码,要解释的是partitionWithDuplicates是分成三部分,分别是小与,等于与大于三部分,而不是普通的小于与大于。inpair是新建的一个类用来储存相等部分开始下标与大于部分开始下标。重复调用小于与大于部分就能完成数组排序。
问题是:长度是1000的数组也能完成排序,但是是当数组长度过大时,比如是20000,出现了stack overflow(栈溢出)。这个问题应该如何解决?