package algorithms;
public class RadixSort {
static int[] a = { 329, 457, 657, 839, 436, 720, 355 };
public static void main(String[] args) {
radixSort();
for(int i : a){
System.out.print(i + " ");
}
}
private static void radixSort(){
int[] tmp = new int[a.length];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < a.length; j++)
tmp[j] = a[j] / pow(10, i) % 10;
a = countingSort(tmp, 9);
}
}
public static int pow(int a, int n) {
int result = 1;
while (n != 0) {
if ((n & 1) != 0) {
result *= a;
}
a *= a;
n = n >> 1;
}
return result;
}
private static int[] countingSort(int[] tmp, int max){
int[] c = new int[max + 1];
int[] b = new int[tmp.length];
for(int i = 0; i < c.length; i++)
c[i] = 0;
for(int i = 0; i < tmp.length; i++)
c[tmp[i]] = c[tmp[i]] + 1;
for(int i = 1; i < c.length; i++)
c[i] = c[i] + c[i-1];
for(int i = tmp.length - 1; i >= 0; i--){
b[c[tmp[i]] - 1] = a[i]; //这里等式右边为a[i]很重要
c[tmp[i]] = c[tmp[i]] - 1;
}
return b;
}
}
基数排序(radixSort)
最新推荐文章于 2024-01-01 10:21:17 发布
