啊哈算法-桶排序

桶排序比较简单,设置一个足够大的数组,先初始化数组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即可。

posted @ 2021-12-11 20:44  m2on  阅读(50)  评论(0编辑  收藏  举报