基数排序:

  基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排。这里介绍第一种LSD排序算法。

首先,我们先了解什么是基数。基数是根据具体的排序情况而定的,比如我们常见的基数是十进制-10,还有二进制-2。

其次,要熟记基数排序的思想:通过对每一个位上的值相排序,就可以完成对整个数组的排序。

  基数排序的算法实现流程:遍历所有数组元素,找出元素最大的位值 -------->从低位到高位把数组元素上的位值存入链表中-------->遍历所有链表,将链表里面的值重新赋值给数组,再情况链表。

  例如:对数组   int[ ]  data = {421, 240, 35, 532, 305, 430, 124};进行排序,首先我们要做的是对个位上的数值进行排序。

第一遍排序的结果为:  240 430 421 532 124 35 305

再进行十位上的数值排序:

第二遍排序的结果为:  305 421 124 430 532 35 240

再进行百位上的数值排序:

第三遍排序的结果为:  35 124 240 305 421 430 532

最后我们的到的排序结果就是: 35 124 240 305 421 430 532

至此,已经完成了对数组的排序

  附源码:

public class RadixSort {@Testpublic void fun() {int[] n = {421, 240, 35, 532, 305, 430, 124};radixSort(n);for(int i : n) {System.out.print(i + " ");}}//实现基数排序 LSD-从最低位开始排 MSD-从最高位开始排public void radixSort(int[] data) {int maxBin = maxBin(data);List<List<Integer>> list = new ArrayList<List<Integer>>();for(int i  = 0; i < 10; i ++) {list.add(new ArrayList<Integer>());}for(int i = 0, factor = 1; i < maxBin; factor *= 10, i ++) {for(int j = 0; j < data.length; j ++) {list.get((data[j]/factor)%10).add(data[j]);}for(int j = 0, k = 0; j < list.size(); j ++) {while(!list.get(j).isEmpty()) {data[k] = list.get(j).get(0);list.get(j).remove(0);k ++;}}}}//计算数组里元素的最大位数public int maxBin(int[] data) {int maxLen = 0;for(int i = 0; i < data.length; i ++) {int size = Integer.toString(data[i]).length();maxLen =  size > maxLen ? size : maxLen;}return maxLen;}
}

转载于:https://www.cnblogs.com/ranter/p/9197983.html

数据结构Java版之基数排序(四)相关推荐

  1. 数据结构java版txt,图解数据结构:使用Java

    图解数据结构:使用Java 下载 mobi epub pdf ☆☆☆☆☆ 胡昭民 著 下载链接在页面底部 发表于2021-03-10 图书介绍 出版社: 清华大学出版社 ISBN:9787302402 ...

  2. 数据结构(Java版 2022-10-30)

    第一章:算法介绍 数据结构与算法面试题" 一.字符串匹配问题:有一个字符串str1="计算机科学与技术学院欢迎您!" 和另一个字符串 str2="计算机科学与技 ...

  3. 数据结构(Java版2022-10-29)

    第一章:算法介绍 数据结构与算法面试题" 一.字符串匹配问题:有一个字符串str1="计算机科学与技术学院欢迎您!" 和另一个字符串 str2="计算机科学与技 ...

  4. 数据结构(java版)SortedSeqList(排序顺序表)

    SortedSeqList(排序顺序表) 代码部分: public class SortedSeqList<T extends Comparable<? super T>> e ...

  5. 四人麻将 java版下载_四人麻将下载-四人打麻将免费版手机最新下载

    四人麻將創新結合國標麻將和四川省血液之戰多種玩法,花式魔幻的國家標准番型和胡牌,連胡不斷的血流成河,一站到底的血流成河,讓你high爆整場爽翻天.點卷送不斷,開展活動更有手機話費.手機等豐富獎賞! 四 ...

  6. 数据结构Java版实验五_实验五数据结构综合应用 20162310

    分析系统架构 Sprite精灵类 ISprite精灵类是所有类的父类 CombatAircraft战斗机类 首先确保战斗机完全位于Canvas范围内,每隔7帧发射单发黄色子弹. protected v ...

  7. 数据结构java版 大学_数据结构(Java版)

    "数据结构"是计算机科学与技术专业.软件工程专业甚至于其它电气信息类专业的重要专业基础课程.它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从事大型 ...

  8. 数据结构java版之 栈的应用一

    上一篇我们自定义了栈和队列.本篇使用栈结构来完成一个功能,看看他的应用.会分两篇讲解.本篇需求:设计一个栈结构,实现字符串的反转,字符串不包括汉子. 过程如下,因为代码做了很详细的解释.没有必要再去讲 ...

  9. 数据结构java版之《简单排序》

    本篇文章针对上一篇的数组,实现几个简单的排序功能,并给出实现思路.包括冒泡.选择.插入三种最简单的排序. 1.冒泡排序: ​实现思路图解: public static void sort(int[] ...

最新文章

  1. python 多线程讲解(如何实现多线程,递归锁,互斥锁,信号量,事件等)
  2. 纪录备忘:应用中的脚本应用
  3. Asp.net MVC 示例项目Suteki.Shop分析之---ViewData
  4. Oracle Code登录北京 代码盛宴邀你high起来|免费报名
  5. 解决 VUE: [Vue warn]: Do not use built-in or reserved HTML elements as component id: xx
  6. 336计算机考研怎么做到啊,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  7. (软件工程复习核心重点)第四章总体设计-第四节:描绘软件结构的图形工具
  8. UVa1587 - Box
  9. [bbk4995] 第99集 -第12章 -数据移植 05
  10. sudo: vim:找不到命令_linux常用命令(3)
  11. Ubuntu 20.04 安装 Google 拼音输入法
  12. 理财APP的低成本ASO优化实战
  13. excel怎么自动填充连续数字
  14. 前端实现视频录制功能
  15. 【消费者心理与行为(第6版)】第7章 消费者的需要与购买动机
  16. 阳历转化为农历的c语言程序,公历和农历之间如何转换?
  17. 张振民北京计算机专修学院,工行甘肃省分行张振民一行来校考察交流
  18. C++中sprintf_s与sprintf的不同
  19. R语言数学建模(2):how to build a graph
  20. 2016年12月六级农业翻译

热门文章

  1. [转]动态添加Fragments
  2. [Linux] - xxx 不在 sudoers 文件中。此事将被报告。
  3. Qt: error lnk1158 无法运行rc.exe
  4. 暑假攻略:怎样让孩子过一个充实又省钱的假期
  5. codeforces166E - Tetrahedron DP
  6. 第15章 使用DOM的脚本语言
  7. Example3_3
  8. 《设计模式之禅》学习笔记(九)
  9. Vue2.x总结(1)
  10. HTML5 文本元素