排序算法(十一) 基数排序
2016-10-27 15:16
162 查看
package study; public class SortNumberTest { public static void main(String[] args) { Test1(); } public static void Test1(){ System.out.println("基数排序"); int[] numbers12={ 50, 123, 543, 187, 49, 30, 0, 2, 11, 100}; radixSort(numbers12); System.out.println("..................................."); } //基数排序需依赖于其它排序方法,本身不是一种独立的排序方法 //所用的其它辅助排序方法必须稳定,否则排序出错 public static void radixSort(int[] numbers) { print(numbers); //这里为了展示主要代码,部分值先直接定死,可根据实际情况改造 int radix = 10; // 基数 int digit=3;//位数 int i = 0, j = 0; int[] count = new int[radix]; int[] bucket = new int[numbers.length]; // 按照从低位到高位的顺序执行排序过程,即所谓的LSD for (int d = 1; d <= digit; d++) { for (i = 0; i < radix; i++) { count[i] = 0; } for (i = 0; i < numbers.length; i++) { j = getDigit(numbers[i], d); count[j]++; } for (i = 1; i < radix; i++) { count[i] = count[i] + count[i - 1]; } for (i = numbers.length-1; i >= 0; i--) { j = getDigit(numbers[i], d); //该位无数字则记为0 bucket[count[j] - 1] = numbers[i]; count[j]--; } for (i = 0, j = 0; i < numbers.length; i++, j++) { numbers[i] = bucket[j]; } print(numbers); } } private static int getDigit(int x, int d) { int a[] = { 1, 1, 10, 100 }; return ((x / a[d]) % 10); } private static void print(int[] numbers){ for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i]+" "); } System.out.println(); } }
相关文章推荐
- 排序算法——基数排序(桶式排序)
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- 奇偶排序(OddEven Sort)----(排序算法十一)
- 基数排序(Radix Sort)----(排序算法十四)
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 排序算法(八)-基数排序
- scala 排序算法 基数排序
- 常见的排序算法(四)( 归并排序,计数排序 , 基数排序)
- python语言小程序——排序算法3(基数排序)
- 排序算法Java实现(基数排序)
- 【继续思考】排序算法——基数排序与桶排序
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- 排序之表排序、基数排序及全部排序算法比較
- 排序算法总结:一、基数排序
- 排序算法--基数排序(箱排序的改进)
- 数据结构中排序算法- 基数排序(5)
- 排序算法(七)基数排序
- 排序算法-基数排序
- 三种线性的非基于比较的排序算法:计数排序、桶排序与基数排序