为什么该题的运行j=r,j的值应该为9,为什么会变成0?

问题

img

疑问
以n=10,数组各值为6 1 2 7 9 3 4 5 10 8为例。当第一次执行quick_select函数时,j的值为9,然而接着进入while循环,执行第一个while循环和if语句后,j的值就变成了0,这是为什么?

img


#include <stdio.h>
#include<stdlib.h>

int quick_select(int a[], int l, int r, int k) {
    int p = rand() % (r - l + 1) + l;
    int x = a[p];
    {int t = a[p]; a[p] = a[r]; a[r] = t;}
    int i = l, j = r;
    while(i < j) {
        while(i < j && a[i] < x) i++;
        if(i < j) {
            a[j] = a[i];
            j--;
        }
        while(i < j && a[j] > x) j--;
        if(i < j) {
            a[i] = a[j];
            i++;
        }
    }
    a[i] = x;
    p = i;
    if(i - l + 1 == k) return a[i];
    if(i - l + 1 < k) return quick_select(a,i+1,r,k-(i-l+1)); //填空
    else return quick_select(a, l, i - 1, k);
}
    
int main()
{
    int a[100];
    int n;
    scanf("%d ",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("%d\n", quick_select(a, 0, n-1, 5));
    return 0;
}

代码在哪呢?