【发布时间】:2020-12-06 11:18:22
【问题描述】:
我实现了一个 QuickSort 算法,它只适用于 7 个元素,然后对 8 个或更多元素给出 StackOverflow 错误。进入无限循环。适用于数组中存在的元素数量,但如果我再添加一个元素,它会返回 StackOverflow 错误 这是我的代码:
public class QuickSort
{
public void main()
{
QuickSort o = new QuickSort();
int arr[] = {8,5,2,10,1,7,3};
o.sort(arr,0,arr.length-1);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
void sort(int []arr,int l,int h)
{
if(l<h)
{
int pi = partition(arr,l,h);
sort(arr,l,pi);
sort(arr,pi+1,h);
}
}
int partition(int arr[],int l,int h)
{
int pivot = arr[l];
int i=l,j=h;
while(i<j)
{
while(arr[i]<=pivot)
{
i++;
}
while(arr[j]>pivot)
{
j--;
}
if(i<j)
{
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
int t = arr[j];
arr[j] = pivot;
arr[l] = t;
return j;
}
}
【问题讨论】:
-
在第一次分区调用开始时,你的 l==0 和 h==6 你在最后(仍然是 6)返回
j并将其用作下一次调用的 h再次与 l==0 一起分区,因此结果仍然相同。
标签: java arrays algorithm sorting quicksort