1. C。该空与下一空与快速排序的逻辑相同,易得第 (1) 空填 $j--$,也可以联系上下文对称来选择
2. B。理由同上,当然这里可以发现,第 $11$ 行 $a[i] = a[j]$ 后,$a[j]$ 的值在逻辑上已经空出来了,这里肯定是给 $a[j]$ 赋值
3. D。循环操作结束后能保证区间 $[l,i-1]$ 范围内的数都 $>= a[i]$,区间 $[i+1,r]$ 范围内的数都 $<= a[i]$,所以若 $i-l+1==k$,则说明 $a[i]$ 恰为区间 $[l,r]$ 范围内第 $k$ 大的数。
4. C。若 $i-l+1 > k$,则进区间 $[l,i-1]$ 继续查找第 $k$ 大的数。
5. C。若 $i-l+1 < k$,则区间 $[l,r]$ 范围内第 $k$ 大的是应该在区间 $[i+1,r]$ 范围内,但是因为区间 $[l,i]$ 范围内的 $i-l+1$ 个数都大于等于区间 $[i+1,r]$ 范围内的数,所以应去区间 $[i+1,r]$ 范围内找第 $k-(i-l+1)=k+l-i-1$ 大的数。