将数组元素每位数进行比较,获取最终排序结果
public static void main(String[] args) {
int[] arr = {12,14,16,15,13,18,11,17,10,3,6,7,2,8,9,20};
//radixSort(arr);
radixSort1(arr);
System.out.println("排序完成");
}
/**
* 升序
* @param arr 排序数组
*/
private static void radixSort(int[] arr) {
//获取最大值
int max = Integer.MIN_VALUE;
for (int value: arr) {
if(value > max){
max = value;
}
}
//计算最大值是几位数
int maxLength = (max +"").length();
//存放临时数据
int[][] temp = new int[10][arr.length];
//temp中相同下标的数量
int[] count = new int[10];
//根据最大值的位数确认比较几次
for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {
//每一个数字取每一位的余数
for (int j = 0; j < arr.length; j++) {
//余数
int remainder = arr[j]/n%10;
//把当前数据放到对应下标
temp[remainder][count[remainder]] = arr[j];
//记录数量
count[remainder]++;
}
//取的元素需要放的位置
int index = 0;
//把数字取出来
for (int j = 0; j < count.length; j++) {
//当前下标数字数量不为零
if (count[j] != 0){
//循环取数
for (int k = 0; k < count[j]; k++) {
arr[index] = temp[j][k];
//下一个位置
index++;
}
//取数结束,count置零
count[j] = 0;
}
}
}
}
/**
* 降序
* @param arr 排序数组
*/
private static void radixSort1(int[] arr) {
//获取最大值
int max = Integer.MIN_VALUE;
for (int value: arr) {
if(value > max){
max = value;
}
}
//计算最大值是几位数
int maxLength = (max +"").length();
//存放临时数据
int[][] temp = new int[10][arr.length];
//temp中相同下标的数量
int[] count = new int[10];
//根据最大值的位数确认比较几次
for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {
//每一个数字取每一位的余数
for (int j = 0; j < arr.length; j++) {
//余数
int remainder = arr[j]/n%10;
//把当前数据放到对应下标
temp[remainder][count[remainder]] = arr[j];
//记录数量
count[remainder]++;
}
//取的元素需要放的位置
int index = 0;
//把数字取出来
for (int j = count.length - 1; j >= 0; j--) {
//当前下标数字数量不为零
if (count[j] != 0){
//循环取数
for (int k = 0; k < count[j]; k++) {
arr[index] = temp[j][k];
//下一个位置
index++;
}
//取数结束,count置零
count[j] = 0;
}
}
}
}