Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3 3 -35 92 213 -644
Sample Output
213 92 3
Hint
Hint 请用VC/VC++提交
手写快排函数即可
#include <cstdio>
template<typename T> //函数模板
void sort(T *begin,T *end)
{
end--;
if(begin<end)
{
T key=*begin;
T *low=begin;
T *high=end;
while(low<high)
{
while(*high>=key&&low<high)
high--;
while(*low<=key&&low<high)
low++;
T temp=*low;
*low=*high;
*high=temp;
}
*begin=*low;
*low=key;
sort(begin,low);
sort(low+1,end+1);
}
}
int num[1000010];
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m)) //用cin超时了一次。。。。
{
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
sort(num,num+n);
for(int i=n-1;i>n-1-m;i--)
{
if(i!=n-1)
printf(" ");
printf("%d",num[i]);
}
putchar('\n');
}
return 0;
}