算法-基数排序
2021/8/12 1:06:36
本文主要是介绍算法-基数排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基数排序
基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。
具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列
图文
在上图中,首先将所有待比较树脂统一为统一位数长度,接着从最低位开始,依次进行排序。
- 按照个位数进行排序。
- 按照十位数进行排序。
- 按照百位数进行排序。
排序后,数列就变成了一个有序序列。
代码
/** * 基数排序 */ public class RadixSort { /** * 1.先按个位树排序放置到桶中 * 2. * @param arr */ public void radixSortDemo1(int[] arr) { radixSort(arr, 0, arr.length - 1, getMaxDigit(arr)); } /** * 1.首先就是统计当前位数上面有多少个 * @param arr * @param L * @param R * @param digit 最大位数 */ public void radixSort(int[] arr, int L, int R, int digit) { final int radix = 10; // 个位,十位,百位.... int i = 0, j = 0; // 有多少个数准备多少个辅助空间 int[] help = new int[R - L + 1]; for (int d = 1; d <= digit; d++) { // 有多少位就进出几次 // 10个空间 // count[0] 当前位(d位)是0的数字有多少个 // count[1] 当前位(d位)是(0和1)的数字有多少个 // count[2] 当前位(d位)是(0、1和2)的数字有多少个 // count[i] 当前位(d位)是(0~i)的数字有多少个 int[] count = new int[radix]; // count[0..9] for (i = L; i <= R; i++) { j = getDigit(arr[i], d); count[j]++; } for (i = 1; i < radix; i++) { count[i] = count[i] + count[i - 1]; } for (i = R; i >= L; i--) { j = getDigit(arr[i], d); help[count[j] - 1] = arr[i]; count[j]--; } for (i = L, j = 0; i <= R; i++, j++) { arr[i] = help[j]; } } } public static void main(String[] args) { System.out.println(getDigit(1,1)); System.out.println(Math.pow(10, 1)); } /** * 获取当前位数上面的值 * @param x * @param d * @return */ public static int getDigit(int x, int d) { return ((x / ((int) Math.pow(10, d - 1))) % 10); } /** * 获取最高位数 */ private int getMaxDigit(int[] arr) { int maxValue = getMaxValue(arr); return getNumLenght(maxValue); } /** * 获取数组中最大的一个数 * @param arr * @return */ public int getMaxValue(int[] arr) { int max = Integer.MIN_VALUE; for (int i : arr) { if (i > max) { max = i; } } return max; } /** * 获取一个数的位数 * @param value * @return */ public int getNumLenght(int value) { if (value == 0) { return 1; } int lenght = 0; for (int temp = value; temp != 0; temp /= 10) { lenght++; } return lenght; } }
这篇关于算法-基数排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南