基数排序是通过比较对应的个位数或者十位数或者百位数,通过一定的规则进行排序。
(1)优化前相关代码:
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int a[] = {53,3,52,542,748,14,214};
Sort(a);
}
public static void Sort(int a[]){
//第一轮,,将每个元素个位数进行排序。
//定义一个二维数组,表示一共有十个桶,桶的最大长度是a数组的长度。
int buck[][] = new int[10][a.length];
//定义一个一维数组,目的是为了记录各个通内放入元素的个数。
int e_buck[] = new int[10];
for(int i=0;i<a.length;i++){
//取出每个元素的个位数。
int d = a[i]%10;
//放入对应的桶中。
buck[d][e_buck[d]] = a[i]; //这句话表示的意思是通过个位数放到对应的桶中。
e_buck[d]++;
}
int index = 0;
for(int k=0;k<e_buck.length;k++){
if(e_buck[k] !=0) {
for(int i=0;i<e_buck[k];i++){
a[index++] = buck[k][i];
}
}
//处理后,需要将e_buck清除为0.
e_buck[k]=0;
}
System.out.println("个位数排序后:"+Arrays.toString(a));
//第二轮将每个元素的十位数进行排序。
for(int i=0;i<a.length;i++){
//取出每个元素的个位数。
int d = a[i]/10%10;
//放入对应的桶中。
buck[d][e_buck[d]] = a[i]; //这句话表示的意思是
e_buck[d]++;
}
index = 0;
for(int k=0;k<e_buck.length;k++){
if(e_buck[k] !=0) {
for(int i=0;i<e_buck[k];i++){
a[index++] = buck[k][i];
}
}
//处理后,需要将e_buck清除为0.
e_buck[k]=0;
}
System.out.println("十位数排序后:"+Arrays.toString(a));
//第三轮将每个元素的百位数进行排序。
for(int i=0;i<a.length;i++){
//取出每个元素的个位数。
int d = a[i]/100%10;
//放入对应的桶中。
buck[d][e_buck[d]] = a[i]; //这句话表示的意思是
e_buck[d]++;
}
index = 0;
for(int k=0;k<e_buck.length;k++){
if(e_buck[k] !=0) {
for(int i=0;i<e_buck[k];i++){
a[index++] = buck[k][i];
}
}
}
System.out.println("百位数排序后:"+Arrays.toString(a));
}
}
相关代码结果:
(2)优化后相关代码:
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int a[] = {53,3,52,542,748,14,214};
Sort(a);
}
public static void Sort(int a[]){
//第一轮,,将每个元素个位数进行排序。
//定义一个二维数组,表示一共有十个桶,桶的最大长度是a数组的长度。
int buck[][] = new int[10][a.length];
//定义一个一维数组,目的是为了记录各个通内放入元素的个数。
int e_buck[] = new int[10];
for(int count=0,j=1;count<3;j=j*10) {
for (int i = 0; i < a.length; i++) {
//取出每个元素的个位数。
int d = a[i]/j%10;
//放入对应的桶中。
buck[d][e_buck[d]] = a[i]; //这句话表示的意思是通过个位数放到对应的桶中。
e_buck[d]++;
}
count++;
int index = 0;
for (int k = 0; k < e_buck.length; k++) {
if (e_buck[k] != 0) {
for (int i = 0; i < e_buck[k]; i++) {
a[index++] = buck[k][i];
}
}
//处理后,需要将e_buck清除为0.
e_buck[k] = 0;
}
}
System.out.println(Arrays.toString(a));
}
}
相关代码结果: