HDU 1425 sort

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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值