基数排序
来源:互联网 发布:linux删除整个文件夹 编辑:程序博客网 时间:2024/06/03 09:40
思想:
将所有数字从最低位(最高位)开始,每个数相同位比较排序,然后再排下一位,当所有数的所有位都比较结束时,构成了有序。
实现思路
一、初始化ArrayList长度为10;对应0~9,作为桶,桶内数据不排序
二、当取到最高位数是停止循环,也就是当所有数据归到0这个桶里时
三 、所有数进桶,根据相应的位的数映射相应的桶
四、所有数据进桶后,使用辅助数组复制所有桶,并清空桶中所有数据,准备下一次入桶。
实现代码
package sort;import java.util.ArrayList;import java.util.Random;public class RadexSort { private static ArrayList[] helper = new ArrayList[10]; /* * 不能使用foreach初始化,否则初始化不成功 */ static { for (int i = 0;i<helper.length;i++ ) { helper[i]=new ArrayList(); } } /** * 基数排序,从数的低位或者高位开始排列,低位从个位开始排列,入桶后不需要排序,不需要插入; * 开始以自己写的链表作为容器,可能是功力不够,所以很慢,而后改成了使用java 的ArrayList作为容器还过的去; * @param arr */ public static void radexSort(int[] arr) { int d = 0; int point = 0; while (true) { d++; for ( int i : arr ) { point = getDigit(i, d); inputBucket(point, i); } if (helper[0].size() == arr.length) { break; } int index = 0; for ( ArrayList list : helper ) { for ( Object obj : list ) { arr[index++] = (Integer) obj; } } cleanAll(); } } private static void cleanAll() { for ( ArrayList list : helper ) { list.clear(); } } private static void inputBucket(int point, int i) { switch (point) { case 0: helper[0].add(i); break; case 1: helper[1].add(i); break; case 2: helper[2].add(i); break; case 3: helper[3].add(i); break; case 4: helper[4].add(i); break; case 5: helper[5].add(i); break; case 6: helper[6].add(i); break; case 7: helper[7].add(i); break; case 8: helper[8].add(i); break; case 9: helper[9].add(i); break; } } private static int getDigit(int i, int d) { return i / (int) Math.pow(10, d - 1) % 10; } public static void main(String[] args) { int[] arr = new int[100000000]; for ( int i = 0; i < arr.length; i++ ) { arr[i] = new Random().nextInt(100000000); } System.out.println(1);// int[] arr = { 123, 1, 8, 28, 46, 36, 27 }; long startTime = System.currentTimeMillis(); RadexSort.radexSort(arr); long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime);// for ( int i : arr ) {// System.out.println(i);// } }}
阅读全文
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 活动倒计时
- Codeforces Round #442 (Div. 2) B. Nikita and string (记忆化搜索)
- Spring各个jar包之间的依赖关系
- 项目maven依赖成功,但编译一直报错:引用项目的类路径找不到
- Array.asList()和javaBean转array
- 基数排序
- Strust2面试问题
- 合并多个module到一个文件下
- BZOJ1066(SCOI2007)[蜥蜴]--最大流(Dinic)
- 密码框内容的各种展示情况
- 基于jdbc的事务的链接工厂
- C实现C(二)
- 转载代码,我觉得很有用
- 股票量化分析(13)——直线拟合、曲线拟合、方差计算