其实就是个十百千万位...每位数去计数排序 建议先看计数排序
public class RadixSort {
public static void main(String[] args) {
int[] arr = {123, 15, 99, 85, 8888, 0, 0, 99};
int n = arr.length;
radixSort(arr, n);
print(arr, n);
}
private static void radixSort(int[] arr, int n) {
int m = getMax(arr, n);
//通过最大值可得最大值位数 然后循环个,十,百,千,万.... exp=1,10,100,1000,10000.....
for (int exp = 1; m / exp > 0; exp *= 10) {
countSort(arr, n, exp);
}
}
//获取数组中最大的int
private static int getMax(int[] arr, int n) {
int mx = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > mx) {
mx = arr[i];
}
return mx;
}
private static void countSort(int[] arr, int n, int exp) {
int[] output = new int[n];
int i;
int[] count = new int[10];
//Arrays.fill数组填充 将count数组中全部填充int 0
Arrays.fill(count, 0);
//exp 1,10,100,100...代表个十位百位千位
//n=arr.length
//count[] 取商余数计数 例count[7] 为余数为7的 在arr[]中的次数
//count[] 其实就是将exp代表的个位十位百位千位 计数排序
for (i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++;
}
for (i = 1; i < 10; i++) {
count[i] += count[i - 1];
}
for (i = n - 1; i >= 0; i--) {
output[count[(arr[i] / exp) % 10] - 1] = arr[i];
count[(arr[i] / exp) % 10]--;
}
for (i = 0; i < n; i++) {
arr[i] = output[i];
}
}
//打印
static void print(int[] arr, int n) {
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
这个算法学习的参考地址 :D github
顺颂时祺