
这道题的思路是在于那个数据过于的冗长复杂导致他这个时间会变得很长,所以说需要转变一下思路。常规的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;
}
8789

被折叠的 条评论
为什么被折叠?



