1,首先,你知道快排是什么
你可以用双指针同时在左右两边像中间走,
然后,左边肯定是小于临接值,然后,左边有j-1+l个数,
如果k 小于j-1+l,那么我们只要递归左边就可以了
如果k 大于j-1+l,那么就改变k 的值,在递归右边,
从而就这样解决问题。代码如下
int merge_sort(int a[],int l,int r,int k)
{
if(l<r) return a[l];
int i=l-1,r=j+1;
int x=a[l+r>>1];
while(i<j)
{
while(a[++i]<x);
while(a[++j]>x);
if(i<j) swap(a[i],a[j]);
}
int sum=j-1+l;
if(sum>=k) return merge_sort(a,l,j,k);
else merge_sort(a,j+1,r,k-j-1+l);
return ;
}