描述
链接;http://acm.nyist.net/JudgeOnline/problem.php?pid=673
自从悟空当上了齐天大圣,花果山上的猴子猴孙们便也可以尝到天上的各种仙果神酒,所以猴子猴孙们的体质也得到了很好的提高,身高年龄也得到了很大的提升。有一天悟空没事,要带领他的猴子猴孙们出去旅游,为了保持花果山的形象,一位年长的猴子建议猴子们都按身高排成一队。
猴子们是如此的着急出发,如何快速的排好队伍让这个神功盖世的齐天大圣头痛不已。现在请你来当齐天大圣悟空的军师来帮他排序吧。
2
5 100
2 4 5 1 3
10 100
9 8 5 1 10 2 3 4 9 8
1 2 3 4 5
1 2 3 4 5 8 8 9 9 10
思路:用qsort?sort?有这么简单?,果不其然,都超时, 计数排序(基于非排序的算法) !链接:http://baike.baidu.com/view/1209480.htm?fr=aladdin
不用数组下标排序就会超时,如果n为1000000,则冒泡排序不止要进行1000000次排序,
所以一定会超时,用数组下标排序时,不论数多大,每次只循环1000000次。
,注意身高不超过1m。。。
<span style="font-family:Microsoft YaHei;"> #include<cstdio> #include<cmath> #include<ctime> #include<queue> #include<stack> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; #define max(a,b) a>b?a:b #define min(a,b) a>b?b:a #define mem(a,b) memset(a,b,sizeof(a)) int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}}; const int MAXN =110; long long a[MAXN]; int main() { int n,x,m,t,i,j; scanf("%d",&t); while(t--) { mem(a,0); scanf("%d%d",&n,&m); for(i=0;i<n;i++) { scanf("%d",&x); a[x]++; } int ff=1; for(i=1;i<=m;i++) for(j=0;j<a[i];j++) { if(!ff) printf(" "); ff=0; printf("%d",i); } printf("\n"); } } </span>