在没有改进快排实现得到K个数时,时间复杂度达到了O(NlogN),而改进之后时间复杂度降到了O(NlogK).
#include<iostream.h>
int Solt(int *a,int start,int end,int k)
{
if(start==end)
{
return 0;
}
int Post=start;
int Temp=a[start];
int Change;
for(int i=start+1;i<=end;i++)
{
if(a[i]<Temp)
{
Post++;
Change=a[Post];
a[Post]=a[i];
a[i]=Change;
}
}
Change=a[Post];
a[Post]=a[start];
a[start]=Change;
if((Post-start+1<=k)&&(Post-start+1>0))
{
for(int j=start;j<=Post;j++)
{
cout<<a[j]<<endl;
}
int q=Post-start+1;
if ((Post-start+1)<k)
{
Solt(a,Post+1,end,k-q);
}
}
if(Post-start+1>k)
{
Solt(a,start,Post,k);
}
}
int main()
{
int len;
cout<<"Input the len"<<endl;
cin>>len;
int *p=new int[len];
cout<<"Input the num"<<endl;
for(int i=0;i<len;i++)
{
cin>>p[i];
}
Solt(p,0,len-1,2);
return 0;
}