boj449. 排序
时间限制 1000 ms
内存限制 65536 KB
题目描述
给你n个数,请你将他们从小到大输出出来。
输入格式
多组数据。
输入第一行为n,接下来一行给出n个数,每个数在0到10000。
输入文件大小为8.2MB。
输出格式
输出一行,排序之后的n个数。
输入样例
3
4 2 1
输出样例
1 2 4
这道题就是个坑。。。
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里。每个桶子再个别排序,不过,对这道题而言,它的桶可以有10000.所以,它容纳的不是一个数集合,而是个数!你看那个输入数据,看完整个人都觉得很蹊跷。。。
我跳的坑是memset函数,你想想,无数次重复10000大小数组的memset,就是作死。。。
这道题是用一个cmp数组记下用过的桶,然后哩,我们再将桶排序,最后按顺序输出就OK了!
#include
#include
#include
#define size 10001
int num[size];
int cmp[size];
//这个是qsort函数需要的东东
int comp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int i,j;
int n;
int max_;
int csize;
while(scanf("%d",&n)!=EOF){
csize=0;
for(j=1;j<=n;j++){
scanf("%d",&i);
//printf("(%d)",i);
if(!num[i]){
cmp[csize]=i;
csize++;
}
num[i]+=1;
}
qsort(cmp,csize,sizeof(int),comp);
for(i=0;i
0;j--){ printf("%d ",cmp[i]); } } for(i=num[cmp[csize-1]];i>0;i--){ printf("%d",cmp[csize-1]); if(i!=1)printf(" "); else printf("\n"); }//写成两段是为了控制输出格式 for(i=0;i