1. Structure des données et algorithme:
1.1. Créez une méthode de tri par base:
public static void radixSort(int[] arr){
//记录 arr[] 最大值 到 max
int max = arr[0];
for (int i=0; i<arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
//记录 arr[] 最大值的位数 到 maxLength
int maxLength = (""+max).length();
//定义数组 bucket bucketElementCounts
int[][] bucket = new int[10][arr.length];
int[] bucketElementCounts = new int[10];
for(int i=0,n=1; i < maxLength; i++,n*=10) {
//把数据放入桶
for (int j=0; j < arr.length; j++) {
int digiOfElement = arr[j] / n % 10;
bucket[digiOfElement][bucketElementCounts[digiOfElement]] = arr[j];
bucketElementCounts[digiOfElement]++;
}
//把数据取出桶
int index = 0;
for (int k = 0; k < bucketElementCounts.length; k++) {
if (bucketElementCounts[k] != 0) {
for (int l = 0; l < bucketElementCounts[k]; l++) {
arr[index++] = bucket[k][l];
}
}
bucketElementCounts[k] = 0;
}
}
}
1.2. Méthode principale:
public static void main(String[] args) {
//随机创建8万 个数据
int arr[]= new int[80000];
int temp[] = new int[arr.length];
for(int i=0; i<arr.length; i++){
arr[i] = (int)(Math.random()*80000);
}
//计算 冒泡排序时间
double start = System.currentTimeMillis();
System.out.println("计时开始:");
radixSort(arr);//此处写要测试的代码
double end = System.currentTimeMillis();
System.out.println("计时结束, 共耗时:"+ (double)((end-start)/1000) +"秒");
}
• Écrit par ChiKong_Tam le 12 septembre 2020