c语言编程折中法排序数组,为什么右边数组没有排序?

#include
void CelerityRun(int left, int right, int array[ ]);
/*
2020年7月29日17:09:16
为数组元素赋值:
a[0]= 8
a[1]= 14
a[2]= 13
a[3]= 158
a[4]= 45
a[5]= 15
a[6]= 125
a[7]= 95
a[8]= 66
a[9]= 12
8 12 13 14 15
45 125 95 66 158
Press any key to continue

折中法排序数组 运行结果

*/

int main()
{

int i; 
int a[10];
printf ("为数组元素赋值: \n");
/*通过键盘为数组元素赋值*/
for (i=0; i<10;i++)
{
    printf ("a[%d]= ", i);
    scanf  ("%d",&a[i]);
}
/*从小到大排序*/
CelerityRun(0,9,a);




/*输出数组*/
for (i=0; i<10; i++)
{
    printf ("%d\t",a[i]);  /*输出制表位*/
        if (i==4)
            printf("\n");
}
printf("\n");

return 0;

}
void CelerityRun(int left, int right, int array[])
{
int i, j;
int middle, iTemp;
i =left;
j =right;
middle =array[(left+right)/2] ; /*求中间值*/
do
{
while ( (array[i] < middle) && (i /*从左找小于中间值的数 &&逻辑与 全1为1 有0为0 */
i++;
while ( (array[j] > middle) && (j>left) )
/*从右找小于中间值的数*/
j--;

    if (i<=j)                          /*找到一对值*/
    {
        iTemp =array[i];
        array[i]=array[j];
        array[j]=iTemp;
        i++;
        j--;
    }
}while (i<=j);                          /*如果两边的下标交错;就停止(完成一次)*/

/*递归完成左半边*/
if (left<j)
    CelerityRun(left,j,array);
/*递归完成右半边*/
if (left>i)
    CelerityRun(i,right,array);

}

/*递归完成右半边*/
if (left>i)
CelerityRun(i,right,array);
递归条件有问题