1. 基数排序
![基数排序](https://img-blog.csdnimg.cn/20210506153326606.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lXaWxkSG9yc2U=,size_16,color_FFFFFF,t_70)
2. 代码
public class RadixSort {
public static void main(String[] args) {
int[] arr = new int[]{2, 9, 26, 41, 26, 658, 95, 297, 75, 429, 18};
int[] newArr = Arrays.copyOf(arr, arr.length);
newArr = radixSort(newArr);
System.out.println(Arrays.toString(newArr));
}
public static int[] radixSort(int[] arr) {
int maxBitCount = findMaxBitCount(arr);
int[][] arr_bit_10 = new int[10][0];
for (int i = 1; i <= maxBitCount; i++) {
for (int temp : arr) {
String tempStr = String.valueOf(temp);
int index = 0, length = tempStr.length();
if (length >= i) {
index = Integer.parseInt(tempStr.charAt(length - i) + "");
}
putTo2DArr(arr_bit_10, index, temp);
}
arr = getFrom2DArr(arr_bit_10, arr.length);
}
return arr;
}
private static void putTo2DArr(int[][] arr, int index, int temp) {
int[] destArr = arr[index];
int[] tempArr = Arrays.copyOf(destArr, destArr.length + 1);
tempArr[tempArr.length - 1] = temp;
arr[index] = tempArr;
}
private static int[] getFrom2DArr(int[][] arr, int length) {
int[] result = new int[length];
int k = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < arr[i].length; j++) {
result[k++] = arr[i][j];
}
arr[i] = new int[0];
}
return result;
}
private static int findMaxBitCount(int[] arr) {
int bitCount = 0;
for (int temp : arr) {
int length = String.valueOf(temp).length();
if (bitCount < length) {
bitCount = length;
}
}
return bitCount;
}
}