算法思想:依次按个位、十位...来排序,每一个pos都有分配过程和收集过程,array[i][0]记录第i行数据的个数。

package sorting;/*** 基数排序* 平均O(d(n+r)),最好O(d(n+r)),最坏O(d(n+r));空间复杂度O(n+r);稳定;较复杂* d为位数,r为分配后链表的个数* @author zeng**/
public class RadixSort {//pos=1表示个位,pos=2表示十位public static int getNumInPos(int num, int pos) {int tmp = 1;for (int i = 0; i < pos - 1; i++) {tmp *= 10;}return (num / tmp) % 10;}//求得最大位数dpublic static int getMaxWeishu(int[] a) {int max = a[0];for (int i = 0; i < a.length; i++) {if (a[i] > max)max = a[i];}int tmp = 1, d = 1;while (true) {tmp *= 10;if (max / tmp != 0) {d++;} elsebreak;}return d;}public static void radixSort(int[] a, int d) {int[][] array = new int[10][a.length + 1];for (int i = 0; i < 10; i++) {array[i][0] = 0;// array[i][0]记录第i行数据的个数}for (int pos = 1; pos <= d; pos++) {for (int i = 0; i < a.length; i++) {// 分配过程int row = getNumInPos(a[i], pos);int col = ++array[row][0];array[row][col] = a[i];}for (int row = 0, i = 0; row < 10; row++) {// 收集过程for (int col = 1; col <= array[row][0]; col++) {a[i++] = array[row][col];}array[row][0] = 0;// 复位,下一个pos时还需使用}}}public static void main(String[] args) {int[] a = { 49, 38, 65, 197, 76, 213, 27, 50 };radixSort(a, getMaxWeishu(a));for (int i : a)System.out.print(i + " ");}
}

  

转载于:https://www.cnblogs.com/zengzhihua/p/4456753.html

排序算法Java实现(基数排序)相关推荐

  1. js排序算法详解-基数排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-基数排序 其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序.可以把基数排序类 ...

  2. 排序算法python实现_合并排序算法– Java,C和Python实现

    排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...

  3. 排序算法九:基数排序

    排序算法九:基数排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的 ...

  4. 排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)

    排序算法1--图解冒泡排序及其实现(三种方法,基于模板及函数指针) 排序算法2--图解简单选择排序及其实现 排序算法3--图解直接插入排序以及折半(二分)插入排序及其实现 排序算法4--图解希尔排序及 ...

  5. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  6. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  7. java基础排序_Java排序算法-Java入门|Java基础课程

    1. 课程目标排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2 ...

  8. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  9. 八大排序算法Java

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  10. 常用排序算法-----------JAVA实现

    #常用排序算法-插入排序,选择排序,交换排序,归并排序,基数排序 ###排序算法可归类为以下几类: 插入排序: 直接插入排序(DirectInsertSort): 二分法排序(BinarySort): ...

最新文章

  1. LNMP之 nginx 启动脚本和配置文件
  2. 基于标记的AR的OpenCV实现
  3. MATLAB从入门到精通-matlab计算多重复杂多边形重叠面积
  4. Ubuntu linux 关机、重启、注销 命令
  5. 【C语言】删除元素(函数,数组的扫描)
  6. 打破“打工人”魔咒,RPA 来狙击!
  7. 求一个容器的最值的索引_初中几何最值——瓜豆原理模型分析
  8. gulp教程之gulp-minify-css
  9. android 4.4.2截屏方法,Android截屏截图的几种方法总结
  10. 苹果发布新召回计划,这款iPhone两年内免费维修
  11. Win系统 - 教你解决打印机无法安装驱动程序的问题
  12. 单片机C语言仿真图,单片机C语言程序设计代码和仿真图.doc
  13. jquery 后台数据到前台展示
  14. html标签的下一级遍历,jquery属性,遍历,HTML操作方法详解
  15. 瑞星误杀 技术缺失还是道德缺失?
  16. 5G测试完毕,梦想能否照进现实
  17. css选择第一个标签,倒数第二个标签,最后一个标签总结
  18. 摄像头录像大师推荐?如何录制摄像头,图文教程
  19. c语言贪吃蛇游戏源码下载,c语言贪吃蛇游戏源码.doc
  20. software foundations LF Induction

热门文章

  1. LeetCode 6062. 设计一个 ATM 机器
  2. LeetCode 1984. 学生分数的最小差值
  3. LeetCode 1660. 纠正二叉树(BFS)
  4. LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)
  5. LeetCode 759. 员工空闲时间(排序)
  6. c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义
  7. endnote怎么和word关联_endnote x9怎么和word关联?Word中用EndNote X9教程
  8. 论文浅尝 | 将结构预测作为增广自然语言间的翻译任务
  9. 论文浅尝 | 面向 cQA 的跨语言问题检索方法
  10. 论文浅尝 | 利用问题生成提升知识图谱问答