您的位置:首页 > 其它

HDU 1425 sort

2015-07-30 16:07 197 查看

sort

Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 34282 Accepted Submission(s): 10156 [align=left]Problem Description[/align]给你n个整数,请按从大到小的顺序输出其中前m大的数。 [align=left]Input[/align]每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。 [align=left]Output[/align]对每组测试数据按从大到小的顺序输出前m大的数。 [align=left]Sample Input[/align][code]5 3 3 -35 92 213 -644
[align=left]Sample Output[/align]
213 92 3
[/code]
对N个数进行排序,输出最大的M个数
1.快排
#include<stdio.h>#include<algorithm>using namespace std;int a[1000010];int main(){int n,m,i;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);for(i=n-1;i>n-m;i--)printf("%d ",a[i]);printf("%d\n",a[n-m]);}return 0;}
2.堆排序
#include <stdio.h>#include <algorithm>using namespace std;static int a[1000010];int main(){int i,n,m;while(EOF != scanf("%d %d",&n,&m)){for(i=0;i<n;i++)scanf("%d",&a[i]);make_heap(a,a+n);printf("%d",a[0]);for(i=1;i<m;i++){pop_heap(a,a+n-i+1);printf(" %d",a[0]);}printf("\n");}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: