基数排序是指借助对多关键码进行分配和收集的思想对单关键码进行排序。

多关键码排序有两类:最主位优先(MSD)、最次位优先(LSD)。

下面是编码实现(Java):

首先是需要使用LinkedList定义的Node:

public class LinkedNode<T> {//定义结点泛型数据域private T data;//定义结点后继引用域private LinkedNode<T> next;//无参构造函数,构造空结点public LinkedNode() {data = null;next = null;}//构造数据域为element的结点public LinkedNode(T element) {data = element;next = null;}public T getData() {return data;}public void setData(T element) {this.data = element;}public LinkedNode<T> getNext() {return next;}public void setNext(LinkedNode<T> successor) {this.next = successor;}}

实现类

public class RadixSortDemo {/*** 基数排序算法* @param first* @param digit 记录的位数*/@SuppressWarnings({ "rawtypes", "unchecked" })public static void radixSort(LinkedNode first, int digit) {//存储队头引用LinkedNode[] front = new LinkedNode[10];//存储队尾引用LinkedNode[] rear  = new LinkedNode[10];//首尾相接时引用队尾LinkedNode tail = new LinkedNode();//base为被除数int key, base = 1;for (int i = 1; i < digit; i++) {//清空队列for (int j = 0; j < 10; j++) {front[j] = rear[j] = null;}//将记录分配到队列中while (first != null) {key = ((Integer)first.getData() / base) % 10;if (front[key] == null) {front[key] = rear[key] = first;} else {rear[key].setNext(first);rear[key] = first;}first = first.getNext();}//收集、将队列首尾相接for (int j = 0; j < 10; j++) {if (front[j] == null) {continue;}if (first == null) {first = front[j];tail = rear[j];} else {tail.setNext(front[j]);tail = rear[j];}}}}}

时间复杂度分析:
将待排序列看成d个子关键码复合构成,每个子关键码的取值范围为m个,则基数排序的时间复杂度为O(d(n+m)),其中一趟分配的时间复杂度是O(n),每一趟收集的时间复杂度是O(m),整个排序需要执行d趟。基数排序需要m个队列,因此空间复杂度是O(m)。由于采取队列作为存储结构,基数排序是稳定的。

【Java】基数排序相关推荐

  1. java基数排序 数组_万字长文带你掌握Java数组与排序,代码实现原理都帮你搞明白!...

    查找元素索引位置 基本查找 根据数组元素找出该元素第一次在数组中出现的索引 public class TestArray1 { public static void main(String[] arg ...

  2. java基数排序简单实现_基数排序简单Java实现

    1 package ahe.sort; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.i ...

  3. Hark的数据结构与算法练习之基数排序

    算法说明 基数排序是基于计数排序的,所以看这个之前要先看一下计数排序对于理解基数排序是很有帮助的(发现计数和基数的音节几乎一致啊).这个我有写,请点击. OK,现在你肯定已经熟悉了计数排序,那么我就来 ...

  4. 基数排序算法(基于Java实现)

    title: 基数排序算法(基于Java实现) tags: 基数算法 基数排序算法原理及代码实现: 一.基数排序算法的原理 基数排序属于"分配式排序",又称"桶子法&qu ...

  5. Java实现基数排序及其推导过程 Radix Sort

    本文带来八大排序算法之基数排序. 基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sor ...

  6. 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

    经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话   ...

  7. 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序...

    http://www.blogjava.net/javacap/archive/2007/12/14/167618.html 六 归并排序 算法思想是每次把待排序列分成两部分,分别对这两部分递归地用归 ...

  8. 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)

    转载:http://blog.csdn.net/pzhtpf/article/details/7560312 7.归并排序 (1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一 ...

  9. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

最新文章

  1. mysql数据字典生成,在线生成mysql数据字典
  2. AC日记——食物链 codevs 1047
  3. k8s查看pod的yaml文件_【大强哥-k8s从入门到放弃04】Yaml语法解析
  4. awstats 简单日志分析
  5. zkui - Zookeeper的Web UI界面 windows环境
  6. (转)Spring Boot 2 (八):Spring Boot 集成 Memcached
  7. PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值
  8. 【转】Android 基于Socket的聊天室
  9. 疫情当前,企业数字化进程加速
  10. 网站优化数据关键词统计分析优化技巧
  11. MIPS架构对比ARM架构
  12. 2022R2移动式压力容器充装考题模拟考试平台操作
  13. php中mysql_assoc,在PHP中使用mysql_fetch_assoc时出现警告
  14. 【JS】隐匿在计算机软硬件背后的语言
  15. 面试必问---TCP连接
  16. bzoj 2708: [Violet 1]木偶
  17. C语言getchar()和putchar()函数
  18. vscode使用vetur格式化代码
  19. 武汉 华为 android,【武汉华为手机大全】武汉华为手机报价及图片大全-列表版-ZOL中关村在线...
  20. 今日嗅评:搜狗可以搜索微信公众号了,是被腾讯派来探路的吧

热门文章

  1. 前端通信:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码(改迭代已作废,移步迭代10)...
  2. 清除浮动塌陷的4种经典套路
  3. Python成长之路_装饰器
  4. apache htpasswd.exe创建密码
  5. LING与HQL(三)
  6. struts2配置问题
  7. 怎么通过路径藏值,然后通过js,jq获取页面路径带过来的值
  8. EasyExcel项目使用
  9. Kubernetes 创建pod一直处于ContainerCreating 状态解决过程
  10. 被恶意上传了.php,轻松解决网站被恶意镜像