杭电 1425 sort

来源:互联网 发布:房屋装修预算软件 编辑:程序博客网 时间:2024/05/21 17:10

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
原创粉丝点击