博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RadixSort -- 基数排序
阅读量:6854 次
发布时间:2019-06-26

本文共 1742 字,大约阅读时间需要 5 分钟。

  hot3.png

 基数排序属于“分配式排序”(distribution sort),又称“桶排序”(bucket sort)或bin sort ,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。

LSD : "最低位优先" 法

MSD : "最高位优先" 法

/*

待排序数组[62,14,59,88,16]简单点五个数字

分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样

|  0  |  0  | 62 |  0  | 14 |  0  | 16 |  0  | 88 | 59 |

|  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |桶编号

将桶里的数字顺序取出来,

输出结果:[62,14,16,88,59]

再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:

由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序

|  0  | 14,16 |  0  |  0  |  0  | 59 | 62  | 0  | 88 |  0  |

|  0  |    1     |  2  |  3  |  4  |  5  |  6   |  7 |  8  |  9  |桶编号

因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可

最后输出结果:[14,16,59,62,88]

*/

LSD代码如下:

public class RadixSort {    public static void sort(int[] number, int d) { // d表示最大的数有多少位        int k = 0;        int n = 1;        int m = 1; // 控制键值排序依据在哪一位        int[][] temp = new int[10][number.length]; // 数组的第一维表示可能的余数0-9        int[] order = new int[10]; // 数组order[i]用来表示该位是i的数的个数        while (m <= d) {            for (int i = 0; i < number.length; i++) {                int lsd = ((number[i] / n) % 10);                temp[lsd][order[lsd]] = number[i];                order[lsd]++;            }            for (int i = 0; i < 10; i++) {                if (order[i] != 0)                    for (int j = 0; j < order[i]; j++) {                        number[k] = temp[i][j];                        k++;                    }                order[i] = 0;            }            n *= 10;            k = 0;            m++;        }    }    public static void main(String[] args) {        int[] data = { 73, 22, 93, 43, 55, 14, 28, 65, 39, 81, 33, 100 };        RadixSort.sort(data, 3);        for (int i = 0; i < data.length; i++) {            System.out.print(data[i] + " ");        }    }}

 

转载于:https://my.oschina.net/gAKey/blog/1531586

你可能感兴趣的文章
H5游戏接微信小游戏的支付,满满的都是坑!
查看>>
导数、偏导数、方向导数、梯度、梯度下降
查看>>
C# 获取MAC地址
查看>>
Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
查看>>
Linux ldconfig
查看>>
Linux 更改ssh 端口
查看>>
绝对值排序
查看>>
UVA 12716 GCDXOR 数论
查看>>
EFDC水模型 初学者入门 及软件下载学习指导
查看>>
Asp.Net Core采用MailKit部署到Linux Docker连接邮件服务器报错
查看>>
ucenter用户中心头像修改,不使用自带方法,不使用flash 转
查看>>
更改SQLServer实例默认字符集
查看>>
Ubuntu常用软件安装与使用
查看>>
Springboot 如何加密,以及利用Swagger2构建Restful API
查看>>
C++知识点总结(5)
查看>>
高性能Java科学与技术运算库Colt
查看>>
用前端将链接转为二维码,并下载
查看>>
nginx gzip压缩
查看>>
C#设计模式:模板方法模式(Template Method)
查看>>
SpringBoot项目以服务器方式启动
查看>>