• C语言学习之桶排序


      之前的博文写了交换(冒泡)排序、选择排序,本文就写写桶排序。不过我理解的这样不算是真正上的桶排序,我的比较简单而真正的桶排序是比较复杂的,暂且就叫桶排序吧。

      桶排序在排序中应该用的不多吧,个人理解的是比较简单易懂的,针对小量数据的排序很有用,不过有个小缺点就是只适合在屏幕上打印输出,实际的应用中我们是利用这样排列好之后的数据,我想这就是桶排序应用场合比较少的原因吧。

      就简单讲讲吧,故名思意 桶排序就是一排带有序列编号的的桶子,而这编号的范围就是将我们要排序数据包括在内。在我们输入数据的时会在与输入数据相同编号的桶上标记一次,每次输入数据都在与数据相同编号的桶上标记一次,这样每个数据出现的次数就显而易见了,同时排序也好了,我们按照编号顺序依次把没有标记的桶子排除,再根据桶子标记的次数打印等量次数就行了。

    #include"stdio.h"
    int main(void)
    {
        int i, j;
        int n, b[10] = {};//首先将所有桶的标记都重置为 0
        for(j = 0; j < 10; j ++)
        {
            scanf("%d", &n);//依次读入10个数据
            b[n] ++;
        }
        for(i = 0; i < 10; i ++)
                for(j = 0; j < b[i]; j ++)//根据次数打印数据 
                       //没有标记的为0那么就不会打印出来
    printf("%d ", i); }

      当然这里以10以内的数据为例 如输入 4 4 5 6 1 0 4 4 6 8 输出结果为 0 1 4 4 4 4 5 6 6 8

      在运用就自行调整数据范围,更改数组的大小、更改for的范围使之刚好可以把最值包含在内,这样至少可以省点时间。

    #include"stdio.h"
    //排序四位数
    int main(void)
    {
        int i, j;
        int n, b[10000] = {};//调整数组大小
        for(j = 0; j < 10; j ++)
        {
            scanf("%d", &n);//依次读入10个数据
            b[n] ++;
        }
        for(i = 1000; i < 10000; i ++)//调整范围
                for(j = 0; j < b[i]; j ++)
                printf("%d ", i);
    }

      如上修改了一下 就可以用来排序四位数 输入数据 3234 6535 8743 9876 4567 5466 5434 2345 8798 4323 输入结果为 2345 3234 4323 4567 5434 5466 6535 8743 8798 9876

      实际运用就实际修改咯 我个人理解的桶排序是很简单的 但真正的桶排序是有点复杂的 笔者只是了解下 如要深入还需自行百度 Google 哈

  • 相关阅读:
    bzoj1098: [POI2007]办公楼biu
    codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解
    南京大学发布无序列限制的DNA编辑新工具(转自生物通)
    Matlab界面清洗
    二硫化铼(ReS2)的电子输运特性及逻辑器件研究进展
    java中数据字典的使用:
    表单的重复提交,解决方案
    java中常量文件的配置与读取
    java中生成验证码,以及验证码的使用
    邮箱验证,工具类
  • 原文地址:https://www.cnblogs.com/notfound/p/8407171.html
Copyright © 2020-2023  润新知