什么是基数排序?

基数排序又称为非比较型排序
其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数,也可以用来字母的排序 。

简单来说就是从低位开始比较,逐渐往高位递进,直到所有字符都参与比较完毕。

什么是从低到高?

假如是123这样一个数字 他是先从低位3然后逐渐到2在到1来依次排序。

我们先看图

我们可以看到这里的数字是从低位(个位数)然后在到高位(十位数)依次进行比较
然后根据比较的结果放入下面一一对应的数据桶里面

什么是数据桶?

就是用来存放数据排序结果的

放入到数据桶里面之后,现在数据桶里面的数据已经是排序完了的数据,所以我们只需要依次取出即可,然后在往高位数进行比较。
可以看到数据桶里面有个0,这里的0代表的是什么意思呐有两种意思

  1. 一种是:

就是0的意思如果比较的数据==0的话就放入这个0的数据桶里面

  1. 第二种意思是什么呢?

就是如果你一组数据里面长度参差不齐 有三位数也有四位数,而我们基数排序是什么呢
从低位往高位依次进行比较,所以这个时候比较到四位数的时候那些三位数两位数的怎么办他们没办法进行比较,所以就放入0的这个数据桶里面

然后我们在依次取出来在循环操作直到所有的数都参与了比较就可以得到最终的排序结果

代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Alphabetic_sorting
{public static void main(String[] args) {//第一步我们先创建好我们需要排序的数值String[]  strings1 = {"BBA","BAV","ACD","AVD","ABBB","BBBAA"};System.out.println(Arrays.toString(strings1));sorting(strings1);System.out.println(Arrays.toString(strings1));}//具体实现操作// step 1. 找到需要排序的次数(找到最长的单词的长度)// step 2.初始化一个大小为27的数据桶// step 3.开始排序,将每位字符使用ASCII计算后映射到桶的下标上// step 4.将排好序的数据返回public static String[] sorting(String[] strings){//找到字符串中最大的长度来作为循环次数int max = 0;//最大值for (String string : strings) {if (string.length()>max){max = string.length();}}int a = 1;//用来计算要获取哪一位的小标//创建数据大桶List<List<String>>listList = null;//先赋值为null,因为需要每循环一次就要清空桶内的数据//开始排序for (int i = 0; i <=max-1; i++) { //循环多少次listList = new ArrayList<>();//每次循环都重新刷新了一次list集合//创建27个数据桶for (int k = 0; k<27; k++) {listList.add(new ArrayList<>());}//把排序好的数据存放到数据桶中for (String string : strings) {listList.get(getint(string,string.length()-a)).add(string);//string.length()-a 这样就可以获取到每一位数的统一下标位置}a++;//提出数据int index = 0;for (List<String> stringList : listList) {for (String s : stringList) {strings[index++] = s;}}}return strings ;}//得到每个字母的数据通位置public static int getint(String s,int i){if(i<0)//下标越界了就直接返回0 因为是更具最长的字符串来决定循环次数和下标数。// 那样就会导致用长的小标去获取短的导致获取不到就会报错下标越界{return 0;}int a =s.charAt(i);//根据字符获取ASCll表中的位置if (a>64&&a<91){return a-64;}else if (a>96&&a<123){return a-96;//-96就可以得到数据桶的位置假如是a那么他在ASCll表中的位置是97,//那么就的到1就放入下标为1的数据桶中}return 0;}}``

基数排序 字符串的排序相关推荐

  1. 计数排序vs基数排序vs桶排序

    从计数排序说起 计数排序是一种非基于元素比较的排序算法,而是将待排序数组元素转化为计数数组的索引值,从而间接使待排序数组具有顺序性. 计数排序的实现一般有两种形式:基于辅助数组和基于桶排序. 基于辅助 ...

  2. 数字以及字符串的排序

    数字以及字符串的排序 引子 工作中我们经常遇到两种排序场景. 对数字排序 对字符串排序 (对纯字母字符串排序|对纯数字字符串排序|对汉字字符串排序|对混杂了字母汉字数字特殊字符的字符串排序-) 这涉及 ...

  3. java list字符排序吗_List中存放字符串进行排序

    package com.bjpowernode.t03sort; import java.util.ArrayList; import java.util.Collections; /* * List ...

  4. 计数排序,基数排序,桶排序

    转 http://blog.163.com/yuyang_tech/blog/static/216050083201382055821953/ 与合并排序,堆排序,快速排序等基于比较的排序算法不同,计 ...

  5. 排序算法之计数排序、基数排序和桶排序

    转自:http://www.cnblogs.com/ttltry-air/archive/2012/08/04/2623302.html 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是 ...

  6. boost::sort模块实现spreadsort 字符串函子排序示例

    boost::sort模块实现spreadsort 字符串函子排序示例 实现功能 C++实现代码 实现功能 boost::sort模块实现spreadsort 字符串函子排序示例 C++实现代码 #i ...

  7. C语言字符串左右排序交换

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105164028 C ...

  8. python 字符串比较忽略大小写的方法_python实现忽略大小写对字符串列表排序的方法...

    本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧.分享给大家供大家参考.具体分析如下: 先来看看如下代码: string = ''' the stirng Has ma ...

  9. SQL对字符串进行排序

    SQL对字符串进行排序 假设字符串中只由'A'.'B'.'C'.'D'组成,且长度为7.并设函数REPLICATE(<字符串>,<n>)可以创建一个<字符串>的n个 ...

最新文章

  1. python的des和3des加解密
  2. android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决
  3. 计算机视觉算法与应用清华大学,计算机视觉-清华大学.ppt
  4. C/C++浮点数在内存中的存储方式
  5. 继承的基本概念(1)
  6. saveas java_在SaveAs之后Excel崩溃
  7. javascript 西瓜一期 13 十六进制的数数方式与进位
  8. 表空间自动报警存储过程
  9. JQuery - 提交表单
  10. 聊聊代码质量 - 《学得会,抄得走的提升前端代码质量方法》前言
  11. mysql小黑屏怎么用,兰蔻小黑瓶怎么用?多种使用方法教给大家
  12. struts2 传递json对象时的延迟加载异常处理方法
  13. 我的3D虚拟旅游公司的假想
  14. 室外无线AP覆盖解决方案
  15. Sklearn-scaler对比
  16. 微信开放平台开发者认证
  17. Android移动开发-Android开发日历时常用的农历和公历换算代码工具类
  18. OCiOS开发:使用相册、照相机和录像
  19. mysql concat最大长度_GROUP_CONCAT()函数最大长度限制
  20. 支付宝小程序获取用户的user_id案例

热门文章

  1. 【Ice】【06】新建maven项目user-service 部署方式一:使用IceBox + Ice Registry部署
  2. Open CV 图像处理作业
  3. [4G5G专题-126]:5G培训部署篇-3-5G网络优化
  4. stp实验心得_自制STP配置实验
  5. Billu_box靶场实战演练
  6. vue 微信录音倒计时_VUE倒计时视频怎么拍 怎么添加录音
  7. [putty] putty +rz/sz
  8. 功能全面丰富优化 高德地图上线景区导览图及身边事功能
  9. linux系统如何修改磁盘名称,Linux系统怎么修改磁盘参数(名称,盘符等等
  10. sterm机器人编程_STEAM机器人编程——“小汽车”课程