<分区>
我正在尝试实现快速排序算法(在 C# 中),这是我的代码:
public static void sort(ref int[] A)
{
if (A.Length==0 || A.Length==1)
{
return;
}
quickSort(ref A,0,A.Length-1);
}
private static void quickSort(ref int[] A, int left, int right)
{
if (left >= right || left < 0 || right < 0)
return;
int pivot = A[left];
int i = left - 1;
int j = right + 1;
while (true)
{
do
{
i++;
}
while (A[i] < pivot);
do
{
j--;
}
while (A[j] > pivot);
if (i >= j)
break;
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
quickSort(ref A,left,j);
quickSort(ref A, j + 1, right);
}
这个算法工作正常,但是有些地方似乎不合逻辑,我选择了pivot
等于A[left]
然后在 while(true)
循环我写了do{i++}while(A[i]<pivot)
, 我现在注意到第一次它会增加 i
所以A[i]
将等于 A[left]
这是枢轴值,所以这应该意味着这个 do while
循环将在 i 的第一个增量后停止,因此当我尝试添加 =
时运算符到 while
这样它就不会在第一次递增后停止:while(A[i]<=)
我得到了一个堆栈溢出异常(当我在第二个 do while
: while(A[j]>=pivot)
中添加相等运算符时也得到了堆栈溢出异常),我不明白为什么会这样,有人能解释一下吗?