基数排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
代码实现
public static int[] radixSort(int[] nums) {
int max = nums[0];
for (int i = 1;i < nums.length;i++) {
if (max < nums[i]) {
max = nums[i];
}
}
int maxLen = String.valueOf(max).length();
int[] countArr = new int[10];
int[] resArr = new int[nums.length];
for (int i = 0;i < maxLen;i++) {
int division = (int) Math.pow(10, i);
//各个数出现的次数
for (int j = 0;j < nums.length;j++) {
int num = nums[j] / division % 10;
countArr[num]++;
}
//累加次数
for (int j = 1;j < countArr.length;j++) {
countArr[j] += countArr[j - 1];
}
//利用计数排序按当前位数进行排序
for (int j = nums.length - 1;j >= 0;j--) {
int num = nums[j] / division % 10;
resArr[--countArr[num]] = nums[j];
}
//更新排序结果至原数组
for (int j = 0;j < nums.length;j++) {
nums[j] = resArr[j];
}
//计数器归零
for (int j = 0;j < countArr.length;j++) {
countArr[j] = 0;
}
}
return resArr;
}