程序员必须掌握的8种排序算法(八):基数排序
来源:互联网 发布:windows镜像下载网站 编辑:程序博客网 时间:2024/06/05 09:24
(一)基本思想
将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位(即个位数)开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
(二)代码实现
package com.z;import java.util.ArrayList;import java.util.Arrays;public class Sort { public static void radixSort(int[] array) { //获取最大的数 int max = array[0]; for (int i = 1; i < array.length; i++) { if (array[i] > max) { max = array[i]; } } int digitCount = 0; //判断位数,位数即排序的趟数 while (max > 0) { max /= 10; digitCount++; } //建立10个数组; ArrayList<ArrayList<Integer>> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { ArrayList<Integer> list1 = new ArrayList<>(); list.add(list1); } //进行digitCount次分配和收集; for (int i = 0; i < digitCount; i++) { //分配数组元素; for (int num : array) { //得到数字的第i+1位数; int x = num % (int)Math.pow(10, i + 1) / (int)Math.pow(10, i); ArrayList<Integer> list2 = list.get(x); list2.add(num); list.set(x, list2); } int index = 0; //重新排列数组中的元素 for (int k = 0; k < 10; k++) { while (list.get(k).size() > 0) { ArrayList<Integer> list3 = list.get(k); array[index] = list3.get(0); list3.remove(0); index++; } } } } public static void main(String[] args) { int[] arr = {135, 242, 192, 93, 345, 11, 24, 19}; System.out.println("Original array: " + Arrays.toString(arr)); radixSort(arr); System.out.println("Sorted array: " + Arrays.toString(arr)); }}
运行结果:
Original array: [135, 242, 192, 93, 345, 11, 24, 19]
Sorted array: [11, 19, 24, 93, 135, 192, 242, 345]
阅读全文
0 0
- 程序员必须掌握的8种排序算法(八):基数排序
- 必须掌握的八种排序(7-8)--归并排序,基数排序
- 08_程序员必须掌握的8大排序算法_基数排序
- 程序员必须掌握的8种排序算法(五):冒泡排序
- 程序员必须掌握的8种排序算法(六):快速排序
- 程序员必须掌握的8种排序算法(七):归并排序
- 程序员必须掌握的十种算法---快速排序算法
- 程序员必须掌握的十种算法---堆排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Spring整合Quartz2.1.1(执行中,得到application上下文,执行bean方法)
- Hive(十七)--排序
- CentOS7.2系统下使用node-fontnik将tff字体转pbf字体
- 隐藏UITableView的滚动条以及修改滚动条的颜色
- StringBoot整合Shiro
- 程序员必须掌握的8种排序算法(八):基数排序
- Java锁的种类和区别
- SpringBoot整合Quartz-动态读取任务执行(2.2.1)
- SIM上运营商SPN(Service Provider Name)的读取
- Springboot系列文章
- 熵的通俗理解
- SpringBoot集成Rabbit使用TopicRabbit指定发送集合
- Spring之ioc操作与属性注入
- 输出100-500之间的水仙花数