boj449. 排序-桶排(有坑...)

这篇博客介绍了BOJ449排序问题,讲解了桶排序算法的应用,并特别指出在处理大数据量时使用memset填充大数组可能导致性能问题。解决方案是使用cmp数组记录已使用的桶,通过qsort进行排序,最终按顺序输出结果。
时间限制 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
       
      
     
    
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值