zoukankan      html  css  js  c++  java
  • 桶排序+基数排序+计数排序

    桶排序

    1.原理:

        将需要排序的数组分在有限的桶里

        然后对每个桶中的数分别排序

    (对每个桶的操作:1.别的排序算法  2.以递归的方式继续使用桶排序)

    2.过程:

    1. 假设待排序的一组数统一的分布在一个范围中,并将这一范围划分成几个子范围,也就是桶
    2. 将待排序的一组数,分档规入这些子桶,并将桶中的数据进行排序
    3. 将各个桶中的数据有序的合并起来

    3.举个例子:

        设有数组 array = [29, 25, 3, 49, 9, 37, 21, 43]

        那么数组中最大数为 49

        先设置 5 个桶

        那么每个桶可存放数的范围为:0~9,10~19,20~29,30~39,40~49

        然后分别将这些数放人自己所属的桶

        然后,分别对每个桶里面的数进行排序

        或者在将数放入桶的同时用插入排序进行排序

        最后,将各个桶中的数据有序的合并起来

    基数排序:

    1.原理:

        桶排序的拓展(我没看出来这两者的联系喵喵喵?

        将整数按位数切割成不同的数字,然后按每个位数分别比较。

    2.过程:

        首先,将要比较的数值统一成同样的数位长度(数位少的在前面补0)

        然后,从最低位开始,依次进行一次排序

        

    3.再举个栗子(假装图文并茂嘿嘿嘿...

      通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63, 616},它的示意图如下

    计数排序:

    1.原理:

        把需要排序的数组 分到有限的桶里

    2.过程:

        假设有一个a数组,其中装着要排序的数列

        a数列的数据范围为[x,y)

        创建一个大小为y的桶数组r

        将容量为y的桶数组中的每一个单元都看作一个独立的"桶"

        遍历每个数组a

        a的值为r数组的下标

        并将该桶存的数值+1

    3.又举个栗子:

       a[3] = 5

       r[5]++;

    假设a={8,2,3,4,3,6,6,3,9}, max=10。

    此时,将数组a的所有数据都放到需要为0-9的桶中。如下图:

  • 相关阅读:
    linux杀死僵尸进程
    通过dd命令显示硬盘的读写性能
    linux 压缩与解压缩
    linux云主机cpu一直很高降不下来,系统日志报nf_conntrack: table full, dropping packet.
    vsftp配置文件详解
    linux中ping带时间及打印内容到文件
    atop工具检测linux硬件异常
    windows连接服务端的域名正常,linux却不通,(针对于负载均衡后端节点设置)
    有你的地方就是天堂
    Java 异常 —— java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10786129.html
Copyright © 2011-2022 走看看