基数排序之java实现
2016-04-01 13:14
281 查看
基本思想:先将所有数按各位排序,接着按十位排,依此类推。就是百位十位都相等的最一开始排的个位的就会起作用。
import java.util.Arrays; public class JiShuPaiXu { public static void main(String[] args) { int[] data = new int[] { 1100, 192, 221, 12, 23 }; print(data); radixSort(data, 10, 4); System.out.println("排序后的数组:"); print(data); } public static void radixSort(int[] data, int radix, int d) { // 缓存数组 int[] tmp = new int[data.length]; // buckets用于记录待排序元素的信息 // buckets数组定义了max-min个桶 int[] buckets = new int[radix]; for (int i = 0, rate = 1; i < d; i++) { // 重置count数组,开始统计下一个关键字 Arrays.fill(buckets, 0); // 将data中的元素完全复制到tmp数组中 System.arraycopy(data, 0, tmp, 0, data.length); // 计算每个待排序数据的子关键字 for (int j = 0; j < data.length; j++) { int subKey = (tmp[j] / rate) % radix; buckets[subKey]++; } for (int j = 1; j < radix; j++) { buckets[j] = buckets[j] + buckets[j - 1]; } // 按子关键字对指定的数据进行排序 ,即将按关键字拍好的数组添加到原数组中 for (int m = data.length - 1; m >= 0; m--) { int subKey = (tmp[m] / rate) % radix; data[--buckets[subKey]] = tmp[m]; } rate *= radix; } } public static void print(int[] data) { for (int i = 0; i < data.length; i++) { System.out.print(data[i] + "\t"); } System.out.println(); } }
相关文章推荐
- Java关键字static、final使用小结
- Spring MVC系列(三)之获取参数
- 20145334赵文豪 《Java程序设计》第4周学习总结
- jdk自带webservice 应用
- java实验题——学生成绩排序并打印
- SpringMVC——接收请求参数和页面传参
- Eclipse修改项目包名(简单几步搞定)
- eclipse使用技巧-自动提示
- java JDBC通用BaseDao升级版0.3
- Java入门:一些初学者需要掌握的基础算法程序——二分查找
- java JDBC通用BaseDao升级版0.2
- JAVA JDBC通用BaseDao版0.1
- Openfire4.0.2源码部署到Eclipse
- MAVEN 工程打包resources目录外的更多资源文件
- java中Socket编程
- java集合的讲解
- JAVA·多线程:线程优先级
- springMVC4(2)请求映射全面分析
- 找不到或无法加载主类 com.sun.tools.javac.Main
- [JAVA · 初级]:14.数组