package com.itguigu.jishupaixu;
public class Demo {
public static void main(String[] args) {
int[] arr1=new int[5000000];
for (int i = 0; i <arr1.length ; i++) {
arr1[i]=(int)(Math.random()*8000000);
}
long timeMillis = System.currentTimeMillis();
sort(arr1);
long millis = System.currentTimeMillis();
System.out.println(millis-timeMillis);
}
public static void sort(int[] arr){
//定义十个桶,最大存储容量为传入的数组的大小
int[][] barrel=new int[10][arr.length];
//定义桶里装的数据位子
int[] temp=new int[10];
//找到最大数来决定循环多少次
int max=arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[0]<arr[i]){
max =arr[i];
}
}
for (int p = 0 ,l=1; p < new Integer(max).toString().length(); p++,l*=10) {
for (int i = 0; i < arr.length; i++) {
//拿到数组中每个数字的下标
int index=arr[i]/l%10;
//放到对应下标桶中
barrel[index][temp[index]]=arr[i];
//初始化temp[i]=0,放入一个数据,应该往后移一位
temp[index]++;
}
int index=0;
//重新排序
for (int j = 0; j <barrel.length ; j++) {
//如果桶中有数据
if(temp[j]!=0){
//取出桶中数据给原来数组
for (int k = 0; k < temp[j]; k++) {
arr[index++]= barrel[j][k];
}
//清空存放的数据
temp[j]=0;
}
}
}
}
}