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