zoukankan      html  css  js  c++  java
  • 什么是桶排序?

    桶排序

    桶排序 (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!!! 更多内容请关注微信公众号:“大李日志”
  • 相关阅读:
    程序员达到高效率的一种境界 狼人:
    IBM夏然:软件产业对整个国家发展举足轻重 狼人:
    浅析Node.js:一个“编码就绪”服务器 狼人:
    eBay的Turmeric和VJet的源程序移到了GitHub上 狼人:
    程序员最常见的技术性误区 狼人:
    我不是一个工程师——我是一个软件开发者 狼人:
    【简讯】Adobe停止发布AIR for Linux版本 狼人:
    【赏析】15个非常棒的使用CSS3的设计组合 狼人:
    5款最好的免费Linux缓存系统 狼人:
    漫画:天堂里没有程序员! 狼人:
  • 原文地址:https://www.cnblogs.com/bigbigli/p/13606948.html
Copyright © 2011-2022 走看看