- 求n个数中第k大的数
- 求n个数中前K大的数
void exchange(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
int partition(int *a,int l,int r)
{
int i=l-1;
int j=l;
int x=a[r];
for(j=l;j<r;j++)
{
if(a[j]>=x)
{
exchange(a[i+1],a[j]);
i++;
}
}
exchange(a[i+1],a[r]);
return i+1;
}
void getKMax(int *a,int l,int r,int k)
{
if(l>=r)
return;
int q=partition(a,l,r);
if(q==k-1)
return;
else if(q>=k)
return getKMax(a,l,q-1,k);
else
return getKMax(a,q+1,r,k-(q+1));
}
int* findTopK(int *a,int n,int k)
{
int *result = new int[k];
getKMax(a,0,n-1,k);
for(int i=0;i<k;i++)
cout<<a[i]<<" ";
cout<<endl;
for(int i=0;i<k;i++)
result[i]=a[i];
return result;
}
- 快速排序