排序算法Java实现(基数排序)
算法思想:依次按个位、十位...来排序,每一个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实现(基数排序)相关推荐
- js排序算法详解-基数排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-基数排序 其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序.可以把基数排序类 ...
- 排序算法python实现_合并排序算法– Java,C和Python实现
排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...
- 排序算法九:基数排序
排序算法九:基数排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的 ...
- 排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)
排序算法1--图解冒泡排序及其实现(三种方法,基于模板及函数指针) 排序算法2--图解简单选择排序及其实现 排序算法3--图解直接插入排序以及折半(二分)插入排序及其实现 排序算法4--图解希尔排序及 ...
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 九大排序算法Java实现
之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...
- java基础排序_Java排序算法-Java入门|Java基础课程
1. 课程目标排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2 ...
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 八大排序算法Java
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...
- 常用排序算法-----------JAVA实现
#常用排序算法-插入排序,选择排序,交换排序,归并排序,基数排序 ###排序算法可归类为以下几类: 插入排序: 直接插入排序(DirectInsertSort): 二分法排序(BinarySort): ...
最新文章
- LNMP之 nginx 启动脚本和配置文件
- 基于标记的AR的OpenCV实现
- MATLAB从入门到精通-matlab计算多重复杂多边形重叠面积
- Ubuntu linux 关机、重启、注销 命令
- 【C语言】删除元素(函数,数组的扫描)
- 打破“打工人”魔咒,RPA 来狙击!
- 求一个容器的最值的索引_初中几何最值——瓜豆原理模型分析
- gulp教程之gulp-minify-css
- android 4.4.2截屏方法,Android截屏截图的几种方法总结
- 苹果发布新召回计划,这款iPhone两年内免费维修
- Win系统 - 教你解决打印机无法安装驱动程序的问题
- 单片机C语言仿真图,单片机C语言程序设计代码和仿真图.doc
- jquery 后台数据到前台展示
- html标签的下一级遍历,jquery属性,遍历,HTML操作方法详解
- 瑞星误杀 技术缺失还是道德缺失?
- 5G测试完毕,梦想能否照进现实
- css选择第一个标签,倒数第二个标签,最后一个标签总结
- 摄像头录像大师推荐?如何录制摄像头,图文教程
- c语言贪吃蛇游戏源码下载,c语言贪吃蛇游戏源码.doc
- software foundations LF Induction
热门文章
- LeetCode 6062. 设计一个 ATM 机器
- LeetCode 1984. 学生分数的最小差值
- LeetCode 1660. 纠正二叉树(BFS)
- LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)
- LeetCode 759. 员工空闲时间(排序)
- c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义
- endnote怎么和word关联_endnote x9怎么和word关联?Word中用EndNote X9教程
- 论文浅尝 | 将结构预测作为增广自然语言间的翻译任务
- 论文浅尝 | 面向 cQA 的跨语言问题检索方法
- 论文浅尝 | 利用问题生成提升知识图谱问答