杭电 1425 sort

sort

Time Limit : 6000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)

Total Submission(s) :    Accepted Submission(s) :

Problem 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++提交

 


 

 

 

 

      排序题,由于数据较多,故使用冒泡排序会超时,应用快速排序和HASH算法排序,下面是用HASH算法和快速排序的代码,快速排序涉及c++的函数自学吧!HASH算法很有意思,就讲讲,我们经常用到数组存数,但在这不一样,在这里我们用到了数组的空间位置储存信息,我们把输入的数存入对应的数组位置上,就好像将本来混乱输入的数据归位一样,并通过数组的值变化记录下来,具体看看代码就懂了!

 

 

 

 

 

 

代码如下:



#include<stdio.h>

#include<string.h>

int a[1000000];//由于数的大小在

int main()

{

 int n,m,k;

 while(scanf("%d%d",&n,&m)!=EOF)

 {

  memset(a,0,sizeof(a));//将数组所用数赋为0

  for(int i=0;i<n;i++)

        {

     scanf("%d",&k);

     a[k+500000]=1;//记录输入的数

        }

        for(int j=1000000;m>0;j--)

        {

         if(a[j]==1)

         {

          if(m==1)

          printf("%d\n",j-500000);

          else

          printf("%d ",j-500000);

          m--;

         }

        }

      

 }

 return 0;

} 

 

 

#include<cstdio>

#include<algorithm>

using namespace std;

const int maxn=1000005;

int ans[maxn];

int main()

{

    int n,m;

    while(scanf("%d%d",&n,&m)!=EOF)

    {

        for(int i=0;i<n;i++) 

           scanf("%d",ans+i);

        sort(ans,ans+n);

        printf("%d",ans[n-1]);

        for(int i=n-2;i>=n-m;i--) printf(" %d",ans[i]);

        printf("\n");

    }

 

 

    return 0;

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值