啊哈算法-桶排序
桶排序比较简单,设置一个足够大的数组,先初始化数组a[m]的元素全部为0。当输入一个值n时改变a[n]的值自加(即a[n]++),以此类推,直到输入结束。
此时a[n]中的值就是输入进去的n的次数,可以用来 升序/降序 打印 不重复或可重复 的元素。
实例:
输入5个属于[0,100010]的正数并升序不重复地输出
#include<stdio.h> #include<string.h> int main(){//输入5个属于[0,100010]的正数并升序不重复地输出 int a[100011],tem; memset(a,0,sizeof(a));//初始化a中全为0 for(int i=0;i<5;i++){ scanf("%d",&tem); a[tem]++; } for(int i=0;i<=100005;i++) if(a[i]!=0) printf("%d ",i); return 0; }
输入5个属于[0,100010]的正数并升序可重复地输出
#include<stdio.h> #include<string.h> int main(){//输入5个属于[0,100010]的正数并顺序不重复地输出 int a[100011],tem; memset(a,0,sizeof(a));//初始化a中全为0 for(int i=0;i<5;i++){ scanf("%d",&tem); a[tem]++; } for(int i=0;i<=100005;i++) if(a[i]!=0) while (a[i]--) printf("%d ",i); return 0; }
如果有负数,就再开一个b[100011],每次存之前判断如果是负数就存到b里面,输出的时候先遍历b再遍历a即可。