Mushroom OJ 6100题解

大家一起看一道题:

 

原题:这才叫排序

时间限制:2s

内存限制:128MB

1.题意:有n个数,把他们从小到大排序。
2.输入格式:第一行,只有一个数字n。 接下来n行,每行一个数。 n=3000000, 每个数<=500000
3.输出格式:N行,为从小到大排序后的数列

样例输入:
9
3
7
6
5
2
4
3
3
1

 

样例输出:
1
2
3
3
3
4
5
6
7

 

大家看一下n的大小,竟然有3000000,
也就意味着:只有快排和桶排能过

代码:

1.桶排

 1 #include<cstdio>
 2 using namespace std;
 3 int n,a[500010],b,max=0,min=0;
 4 int main() {
 5     scanf("%d",&n);
 6     for(int i=1; i<=n; i++) {
 7         scanf("%d",&b);
 8         a[b]++;
 9         if(b>=max) max=b;
10         if(b<=min) min=b;
11     }
12     for(int i=min; i<=max; i++) {
13         for(int j=1; j<=a[i]; j++) {
14             printf("%d\n",i);
15         }
16     }
17     return 0;
18 }
结果
时间  1108 MS
空间 2124 KB

 

 

 

 2.系统库排序:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,a[30000010];
 5 int main() {
 6     scanf("%d",&n);
 7     for(int i=1; i<=n; i++) scanf("%d",&a[i]);
 8     sort(a+1,a+n+1);
 9     for(int i=1; i<=n; i++) printf("%d\n",a[i]);
10     return 0;
11 }

 


结果
时间 1247 MS
空间 11892KB 
posted @ 2020-11-13 17:26  VegetableChick  阅读(81)  评论(0)    收藏  举报