<pre name="code" class="java">/*
* 基数排序算法
*/
public class RadixSort {
public static void main(String[] args) {
new RadixSort().start();
}
private void start() {
int[] array = {738,257,456,198,847,653,385,514,925,237,574};
radixsort(array,3);
System.out.print("排序后数据: ");
for(int i:array) {
System.out.print(i + " ");
}
}
private void radixsort(int[] array,int d) {
for(int i=1;i<=d;i++) {
countsort(array,i);
}
}
private void countsort(int[] array, int d) {
int length = array.length;
int[] a = new int[length]; //用于存放第i位的值
int[] b = new int[length]; //array缓存区
int[] c = new int[10]; //从0到9的值
//将array中的元素复制一份到b中
for(int i=0;i<length;i++) {
b[i] = array[i];
}
//将array数组中的第d位保存到数组a中
for(int i=0;i<length;i++) {
if(d == 1) {
a[i] = array[i] % (int)Math.pow(10, d);
} else if(d > 1) {
a[i] = array[i] % (int)Math.pow(10, d)
/ (int)Math.pow(10, d-1);
}
}
//计算a[i]的个数
for(int i=0;i<length;i++) {
c[a[i]]++;
}
//计算小于等于c[]的数
for(int i=1;i<10;i++) {
c[i] += c[i-1];
}
//将array中的数据存到相应位置
for(int i=length-1;i>=0;i--) {
array[c[a[i]]-1] = b[i];
c[a[i]]--;
}
}
}
运行结果:
排序后数据: 198 237 257 385 456 514 574 653 738 847 925