c语言快速排序算法实现中数据莫名改变

刚学的快速排序于是自己试了试
但是遇到一个很奇怪的问题就是,数字小的能正常工作,数字大了(大概三位数开始)就会出错,更奇怪的是同样的样例多试几次之后又能正常工作了,我实在是找不着头脑
代码:

void exchange(int *a, int *b) {
    //交换两个整形数组元素
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

void qsort(int *list, int len) {
    int position = -1;
    int flag = list[len - 1];
    if (len <= 1) {
        return;
    }
    for (int  i = 0; i < 5; i++) {
        if (list[i] <= flag) {
            position++;
            if (position != i) {
                exchange(list + position, list + i);
            } else {
                continue;
            }
        } else {
            continue;
        }
    }
    //递归
    qsort(list, position);//左
    qsort(list + position + 1, len - position - 1);//右
}

int main() {

    int list[5];
    while (1) {
        printf("\n输入:");
        for (int i = 0; i < 5; i++) {
            scanf("%d", &list[i]);
        }
        printf("排序后:\n");
        qsort(list, 5);

        for (int i = 0; i < 5; i++) {
            printf("%d ", list[i]);
        }

    }
    system("pause");
    return 0;
}

问题演示:

img

一两位数试了很多没出过错,但好像一旦出现三位数就可能发生这个问题
断点调试发现进入递归的时候有几率发生数组内容瞬间被修改,求解答!

第15行:for (int i = 0; i < 5; i++) 应改为:for (int i = 0; i < len; i++)