数组之基数排序
数组之基数排序
排序思想:基数排序的实现不需要进行对关键字的比较,只需要对关键字进行“分配”和“收集”两种操作即可完成。
代码实现
package com.sun.base.Array.text;
import java.util.Arrays;
public class Demo09 {
public static void main(String[] args) {
int[] arr=new int[]{999,84,7,9,5,1000,9999,88,87,99998};
sortArray(arr);
System.out.println(Arrays.toString(arr));
}
private static void sortArray(int[] arr) {
//定义二维数组,分类放置元素
int[][] tempArr=new int[10][arr.length];
//定义计数数组
int[] counts=new int[10];
//获得数组最大元素值
int max = getMAX(arr);
//定义循环轮数
int s = String.valueOf(max).length();//循环轮数为元素最大值十进制位数
for (int i = 0,n=1; i < s; i++,n*=10) {
for (int j = 0; j < arr.length; j++) {
int yushu=arr[j]/n%10;//取个位、十位、百位...上的余数
tempArr[yushu][counts[yushu]++]=arr[j];
}
//取出桶中数组
int index=0;
for (int k = 0; k < counts.length; k++) {
if(counts[k]!=0){
for (int h = 0; h < counts[k]; h++) {
//从桶中取出元素放到原始数组
arr[index]=tempArr[k][h];
index++;
}
counts[k]=0;//清楚上一次统计的个数
}
}
}
}
//取出数组元素最大值
private static int getMAX(int[] arr) {
int max=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]>max){
max=arr[i];
}
}return max;
}
}
运行


浙公网安备 33010602011771号