常用排序算法总结8一一基数排序
来源:互联网 发布:维修基金算法 编辑:程序博客网 时间:2024/05/16 11:47
定义
基数排序(英语:Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
算法步骤
- 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
- 然后,从最低位开始,依次进行一次排序。
- 这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。
注意本次演示采用LSD的方式实现
代码实现(java)
/** * * Description: 基数排序的简单实现,目前只能排序正整数 * @param: @param nums * @param: @return * @return: int[] * @throws */public static int[] radixSort(int[] nums){ int BASE = 10; // 整数基数 int len = nums.length; int[] buffer = new int[len]; int maxValue = nums[0], exp = 1; // 找出nums数组中最大的数 for (int i = 1; i < len; i++) { if (nums[i] > maxValue) { maxValue = nums[i]; } } while (maxValue / exp > 0) { int[] bucket = new int[BASE]; for (int i = 0; i < bucket.length; i++) { bucket[i] = 0; } // 从数的低位开始进行桶排序 for (int i = 0; i < len; i++) { bucket[(nums[i] / exp) % BASE]++; } // 按照当前位给nums排序,确定各个数对应的大概位置buket[(nums[i] / exp) % BASE]的值 // 即为新位置的下标 for (int i = 1; i < BASE; i++) { bucket[i] += bucket[i - 1]; } // 按当前位进行排序存入到新数组 for (int i = len - 1; i >= 0; i--) { int index = (nums[i] / exp) % BASE; buffer[--bucket[(nums[i] / exp) % BASE]] = nums[i]; } for (int i = 0; i < len; i++) { nums[i] = buffer[i]; } exp *= BASE; } return nums;}
参考文章
- 基数排序
0 0
- 常用排序算法总结8一一基数排序
- 常用排序算法总结1一一冒泡排序
- 常用排序算法总结2一一选择排序
- 常用排序算法总结3一一插入排序
- 常用排序算法总结4一一归并排序
- 常用排序算法总结5一一希尔排序
- 常用排序算法总结6一一快速排序
- 常用排序算法总结7一一堆排序
- 常用排序算法总结9一一计数排序
- 算法与数据结构-常用排序算法总结2-基数排序
- 常用排序算法之基数排序
- 常用排序算法之基数排序
- 排序算法总结(9)--基数排序
- 排序算法总结(二)基数排序
- Java排序算法总结(八):基数排序
- 排序算法总结之基数排序 Radix sort
- 常用排序算法之计数排序,基数排序与桶排序
- 排序算法-基数排序_基数排序
- C++四舍五入保留N位小数
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- halcon学习笔记(4)——调用图形函数画Region
- After the first attempt in IA
- VS2015上配置opencv2.4.11
- 常用排序算法总结8一一基数排序
- window对象的常用方法
- 多路径 TCP
- numpy.Scalars
- oracle直方图和执行计划
- 1045 快速排序
- C++ STL map 遍历
- redis集群环境搭建以及java中jedis客户端集群代码实现 博客分类: redis
- 重启网卡