【无标题】

  这道题的思路是在于那个数据过于的冗长复杂导致他这个时间会变得很长,所以说需要转变一下思路。常规的for循环是太复杂了,不能做,所以说使用全新的排序方法叫桶排法。 

你需要两个数组,第一个数组是正常记录你输入的数据,第二个数组的话就是记录输入数据重复的数据的次数。就是你输入一个数组之后,第一个数组的数据作为第二数组的下标,然后进行自加,要使第二个数组整体变为零之后再自加。

还有一个条件是你需要算出第一个数组中的最大数,作为第二个数组角标的最大值第,二个数组的元素就是第一个数组元素出现的次数。

#include <stdio.h>
int main()
{
    unsigned int n,a[100000],i,j,count[100002]={0};
    scanf("%u",&n);
    unsigned int max;
    for(i=0;i<n;i++)
    {
        scanf("%u",&a[i]);
        j=a[i];
        count[j]++;
    }
    max=a[0];
    for(i=0;i<n;i++){
        if(max<a[i])
        max=a[i];
    }
    //printf("%u",max);
    for(i=0;i<=max;i++){
        printf("%u\n",count[i]);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值