C++ 为什么我的快速排序在阵列中只有1个点出错?

C++ 为什么我的快速排序在阵列中只有1个点出错?,c++,quicksort,C++,Quicksort,我正在为一个作业实施快速排序,我已经完成了,但是排序的数组只在一个点上出错。这是输出 Array before QuickSort: 5 99 32 4 1 12 15 8 13 55 Array after QuickSort: 1 5 4 8 12 13 15 32 55 99 它可以对数组中除5和4之外的所有内容进行正确排序。我用调试器玩了几个小时,弄不明白为什么会发生这种情况,有人能帮忙吗?我在下面发布了我的快速排序代码 int main() { int quickArray[SIZE

我正在为一个作业实施快速排序,我已经完成了,但是排序的数组只在一个点上出错。这是输出

Array before QuickSort: 5 99 32 4 1 12 15 8 13 55
Array after QuickSort: 1 5 4 8 12 13 15 32 55 99
它可以对数组中除5和4之外的所有内容进行正确排序。我用调试器玩了几个小时,弄不明白为什么会发生这种情况,有人能帮忙吗?我在下面发布了我的快速排序代码

int main()
{
int quickArray[SIZE] = { 5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55};
int arrStartIndex = 0;
int arrEndIndex =9;

//Code to print array at start
QuickSort(quickArray,arrStartIndex,arrEndIndex);
//Code to print array after sort

return 0
}

void QuickSort(int ar2[],int startIndex, int endIndex)
{
//Begin QuickSort
int Q;
if( startIndex < endIndex )
{
    Q =  Partition(ar2,startIndex,endIndex);
    QuickSort(ar2,startIndex,Q-1);
    QuickSort(ar2,Q+1,endIndex);
}
//End QuickSort
}
int Partition(int ar2[],int P, int R)
{
int x = ar2[R];
int i = P-1;
int temp;

for(int j = P; j <= R-1; j++)
{
    if( ar2[j] < x  )
    {
        i = i +1;
        temp = ar2[i];
        ar2[i] = ar2[j];
        ar2[j] = temp;
    }

    temp = ar2[R];
    ar2[R] = ar2[i+1];
    ar2[i+1] = temp;
}

return (i+1);
}
void快速排序(int ar2[],int startIndex,int endIndex)
{
//开始快速排序
int-Q;
if(开始索引<结束索引)
{
Q=分区(ar2,startIndex,endIndex);
快速排序(ar2,startIndex,Q-1);
快速排序(ar2,Q+1,endIndex);
}
//结束快速排序
}

void QuickSort(int ar2[],int startIndex, int endIndex)
{
//Begin QuickSort
int Q;
if( startIndex < endIndex )
{
    Q =  Partition(ar2,startIndex,endIndex);
    QuickSort(ar2,startIndex,Q-1);
    QuickSort(ar2,Q+1,endIndex);
}
//End QuickSort
}
int Partition(int ar2[],int P, int R)
{
int x = ar2[R];
int i = P-1;
int temp;

for(int j = P; j <= R-1; j++)
{
    if( ar2[j] < x  )
    {
        i = i +1;
        temp = ar2[i];
        ar2[i] = ar2[j];
        ar2[j] = temp;
    }

    temp = ar2[R];
    ar2[R] = ar2[i+1];
    ar2[i+1] = temp;
}

return (i+1);
}
int分区(intar2[],intp,intr)
{
int x=ar2[R];
int i=P-1;
内部温度;

for(int j=P;j

我认为这个代码,如果我理解正确,它将枢轴移动到其最终位置,应该在for循环之外

temp = ar2[R];
ar2[R] = ar2[i+1];
ar2[i+1] = temp;

尝试使用较少的输入。我要看的第一件事是,您每次都在循环中进行交换,而不进行任何排序测试。在我的笔记中,这看起来像是我在for循环中写的,当它真的超出它时,我的错误XD谢谢