七、基数排序
——— 不需要对关键字的比较,只需要对关键字进行“分配”与“收集”两种操作即可完成。
package com.xu.Array;
import java.util.Arrays;
public class Demo11 {
public static void main(String[] args) {
int [] arr=new int[10];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*(100));
}
System.out.println("排序前:"+ Arrays.toString(arr));
//确定排序轮次,获取数组中最大值
// int max=getMax(arr);
//基数排序
sortArray(arr);
System.out.println("排序后:"+ Arrays.toString(arr));
}
private static void sortArray(int[] arr) {
//定义二维数组,放10个桶
int[][] tempArr=new int[10][arr.length];
//定义统计数组
int[] counts=new int[10];
int max=getMax(arr);
int len =String.valueOf(max).length();
//循环轮次
for(int i=0,n=1;i<len;i++,n*=10){
for (int j = 0; j < arr.length; j++) {
//获取每个位上的数字
int ys=arr[j]/n%10;
tempArr[ys][counts[ys]++]=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=arr[0];
for(int i=1;i<arr.length;i++){ //遍历这个数组,取出最大值
if(arr[i]>max){
max=arr[i];
}
}
return max;
}
}