基数排序
时间复杂度nk
整数按位数切割成不同的数字,然后按每个位数分别比较。
由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
public static void Sort(int[] arr) {
int max = arr[0];
for(int i =0;i <arr.length;i++) {
if(arr[i] >max) {
max =arr[i];
}
}
int maxLength =(max + "").length();
int[][] bucket =new int[10][arr.length];
int tempCounts[] =new int[10];
int n =1;
for(int h =0;h <maxLength;h++) {
for(int i =0;i <arr.length;i++) {
int element =arr[i] /n %10;
bucket[element][tempCounts[element]] =arr[i];
tempCounts[element]++;
}
int index =0;
for(int k =0;k <tempCounts.length;k++) {
if(tempCounts[k] !=0) {
for(int j =0;j <tempCounts[k];j++) {
arr[index ++] =bucket[k][j];
}
}
tempCounts[k] =0;
}
n=n*10;
}
}