算法--桶排序与基数排序
来源:互联网 发布:linux一键安装lamp 编辑:程序博客网 时间:2024/06/06 19:45
1、实现
public static void main(String[] args) { int[] src = { 5,6,7,16,15,14,13,12,11,10,8,9,9 }; radixSort(src, 10, 2); print(src); // bucketSort(src, 3, 20); // print(src); } //桶排序 public static void bucketSort(int[] data, int min, int max) { // 缓存数组 int[] tmp = new int[data.length]; // buckets用于记录待排序元素的信息 // buckets数组定义了max-min个桶 int[] buckets = new int[max - min]; // 计算每个元素在序列出现的次数 for (int i = 0; i < data.length; i++) //data[i] - min为相当于min的下标 buckets[data[i] - min]++; for (int i = 1; i < max - min; i++) //算出下标的具体位置。如果有重复的 下标会跳跃 buckets[i] = buckets[i] + buckets[i - 1]; // 将data中的元素完全复制到tmp数组中 System.arraycopy(data, 0, tmp, 0, data.length); // 根据buckets数组中的信息将待排序列的各元素放入相应位置 for (int k = data.length - 1; k >= 0; k--) { int buckIndex = tmp[k] - min;//相对下标 //根据相对下标得出tmp[k]的具体位置 最重要的转换 //--buckets是因为有相同的数据,下标可以减一 int index = --buckets[buckIndex]; data[index] = tmp[k]; } } //基数排序 public static void radixSort(int[] data, int radix, int d) { // 缓存数组 int[] tmp = new int[data.length]; // buckets用于记录待排序元素的信息 int[] buckets = new int[radix]; for (int i = 0, rate = 1; i < d; i++) { Arrays.fill(buckets, 0); System.arraycopy(data, 0, tmp, 0, data.length); for (int j = 0; j < data.length; j++) { //获取数字rate位的数字 如123的十位 (123/10)%10 = 2 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 src[]){ for (int i = 0; i < src.length; i++) { System.out.print(src[i] + " "); } System.out.println(); }
参考:
http://www.cnblogs.com/kkun/archive/2011/11/23/2260267.html
http://www.cnblogs.com/skywang12345/p/3603669.html
http://www.cnblogs.com/oumyye/p/4522467.html
http://blog.csdn.net/apei830/article/details/6596104
阅读全文
0 0
- 算法--桶排序与基数排序
- 常用排序算法之计数排序,基数排序与桶排序
- 桶排序与基数排序
- 桶排序与基数排序
- 桶排序与基数排序
- 【继续思考】排序算法——基数排序与桶排序
- 桶排序与基数排序与计数基数排序
- 【排序算法】基数排序:LSD 与 MSD
- java数据结构与算法-高级排序-基数排序
- 排序算法-基数排序_基数排序
- 计数排序,基数排序,桶排序算法
- 排序算法之基数排序/桶排序
- 三种线性排序算法:计数排序、桶排序与基数排序
- 三种基于“分配”“收集”的线性排序算法---计数排序、桶排序与基数排序
- 三种线性排序算法 计数排序、桶排序与基数排序
- 三种线性排序算法:计数排序、桶排序与基数排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 三种线性排序算法 计数排序、桶排序与基数排序
- 高德获取ip地理位置
- Qt国际化——多语言翻译时值得注意的一个编程问题
- java网络编程面试题
- php读取本地文件常用函数
- SQL查询和优化(六)
- 算法--桶排序与基数排序
- PHP 和 AJAX responseXML 实例
- Spark1.6.1单节点环境搭建
- STM32 CAN 发送和接收过滤原理
- JavaEE面试题库分类及答案之五
- 微信小程序 高度占满整个屏幕
- Flex布局中的Flex-Grow无效问题
- IDEA和Eclipse修改注释模板
- java url正则表达式