• 内部排序算法之基数排序


    桶式排序: 设置一个数组Count,大小为M,并初始化为零,于是Count有M个单元,开始时都是空的。当Ai被读入是Count[Ai]增加1,在所有的输入被读进纸盒,扫描数组Count,打印出排好序的表。该算法耗费O(M+N);

    基数排序是桶式排序(bucket sort)的推广。基数排序就是多趟桶式排序;

    算法步骤如下:

    例子对0-999的一组数字排序:

      第一趟基数排序后的桶:         

    0 1 512 343 64 125 216 27 8 729
    0 1 2 3 4 5 6 7 8 9

    第二趟基数排序后的桶

    8

    1

    0

    216

    512

    729

    27

    125

      343   64      
    0 1 2 3 4 5 6 7 8 9

    最后一趟的基数排序为:

    64

    27

    8

    1

    0

    125 216 343   512   729    
    0 1 2 3 4 5 6 7 8 9

    然后将每个桶里的数顺序输出即为正确数列;

    为了正确结果,该算法唯一可能出错的可能就是如果两个数出自同一个桶但顺序是错误的,不过此时各趟排序保证当几个数进入同一个通的时候,他们是以排序的顺序进入,可以保证得到正确的结果。

    该排序所用的时间是O(P(N+B)),P为排序趟数,B为桶数,N为元素个数;

    Edit By SolarJupiter
  • 相关阅读:
    Hashcode的作用
    java 强弱软虚 四种引用,以及用到的场景
    Object类有哪些公用方法?
    equals和==的区别
    switch能否用string做参数
    Java九种基本数据类型,以及他们的封装类
    Singleton(Java)
    快速排序和二分查找(Javascript)
    快速排序和二分查找(Go)
    ubuntn 安装 MySQL
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3096319.html
Copyright © 2020-2023  润新知