什么是桶排序?

桶排序

桶排序 (Bucket sort):如果需要排序的数据在一个明显有限范围内(整型)时,我们可以用数组下标与数值一一对应,将每个数值放进与它对应的数组元素(桶)中,然后按照顺序输出各桶的值,将得到有序的序列。

序列排序

有n个正整数,数字范围在1~10000之间,请你将这n个数字从小到大输出。
【输入描述】第一行一个正整数n,接下来一行n个数字。(n不超过500000)
【输出描述】从小到大输出这n个数字。
【样例输入】5
2 3 4 6 3
【样例输出】2 3 3 4 6

序列排序参考代码

#include<iostream>
using namespace std;
int a[10005]; 
int main()
{
    int n,t;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        a[t]++;
    }
    for(int i=1;i<=10000;i++)
        for(int j=1;j<=a[i];j++)
        {
            cout<<i<<' ';
        }
    return 0;
}

奇怪的排序

现在有n个整数,范围在-1000~1000, 请你设计程序,将这些数据排序后从大到小输出。
【输入描述】第一行输入一个正整数n。(10000≤n≤50000)
第二行输入n个空格隔开的整数。
【输出描述】输出一行,n个空格隔开的整数。
【样例输入】5
-1 2 4 -3 5
【样例输出】5 4 2 -1 -3

奇怪的排序参考代码

#include<iostream>
using namespace std;
int a[10005]; 
int main()
{
    int n,t;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        a[t]++;
    }
    for(int i=1;i<=10000;i++)
        for(int j=1;j<=a[i];j++)
        {
            cout<<i<<' ';
        }
    return 0;
}

桶排序的应用

我们可以利用桶来完成去重与计数的任务。
解决去重问题时,只需将每个数据装入桶中后,再根据桶中是否有数据(tong[i]>0),来输出对应的桶的编号。
解决计数问题的时候,我们只需要输出桶中的数据即为元素出现的次数。

教务主任的烦恼

小卓所在的学校近期统计了师生的年龄数据,教务处主任希望你帮忙把这些年龄按从小到大的顺序排序,重复的年龄只保留一个。作为编程小高手的你能帮他解决这个问题吗?
【输入描述】 输入共两行,第一行输入整数n,表示要输入n位师生的年龄;
第二行输入n个整数,用空格分开,分别表示每一位老师或学生的年龄。
(0<n<=100000,0<年龄<=100)
【输出描述】输出为一行,输出去掉重复后从小到大排列的年龄,年龄中间用空格隔开。
【输入样例】
10
15 28 35 15 45 23 14 19 26 33
【输出样例】
14 15 19 23 26 28 33 35 45

教务主任的烦恼参考代码

int main()
{
    int n,t;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        a[t]++;
    }
    for(int i=1;i<=100;i++)
        if(a[i])
            cout<<i<<' ';
    return 0;
}

信息学成绩统计

合肥市中小学刚刚结束期中测试,信息学老师想统计全市学生信息学成绩的得分情况,即某些分数的人数,以便改进教学内容和方法,提高同学们的信息学成绩,同学们写个程序,帮助老师实现吧。
【输入描述】输入数据共 3行。第一行两个由空格分隔的正整数n和k,n表示全市所有学生的人数,k表示老师想要统计k个分数的人数;
接下来一行共有n个由空格分隔的正整数,表示每一位学生的成绩,第三行有k个由空格分隔的正整数,表示想要统计的k个分数。
(1≤n≤10000000;0≤k,每个分数≤100)
【输出描述】一行 k个由空格分隔的正整数,对应每个得分的学生数。
【输入样例】10 3
90 96 60 65 67 72 75 75 80 85
65 75 95
【输出样例】
1 2 0

信息学成绩统计参考代码

int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a;
        t[a]++;
    }
    for(int i=1;i<=k;i++){
        cin>>a;
        cout<<t[a]<<' ';
    }
    return 0;
}
我是bigbigli!!! 更多内容请关注微信公众号:“大李日志”
原文地址:https://www.cnblogs.com/bigbigli/p/13606948.html