package com.qcby;
import java.util.Arrays;
public class Dog {
public static void main(String[] args) {
int[] arr = new int[]{5,6,3,2,7,1,8};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr){
//找到数组当中最大的这个数是多少,关系着我们经历多少轮排序
int max = arr[0];
for (int i =0;i<arr.length;i++){
if (arr[i] >max){
max = arr[i];
}
}
int maxLength = (max + "").length();
// 桶
int[][] bucket = new int[10][arr.length];
// 每一个桶当中有多少数据
int[] buckElementCounts = new int[10];
int n = 1;
//多少轮排序
for (int h = 0;h<maxLength;h++){
for (int i = 0;i<arr.length;i++){
int element = arr[i] / n % 10;
bucket[element][ buckElementCounts[element]] = arr[i];
buckElementCounts[element]++;
}
int i=0;
for (int k=0;k<buckElementCounts.length;k++){
//将桶内的数据放回原有数组当中
if(buckElementCounts[k] !=0){
for (int l = 0;l<buckElementCounts[k];l++){
arr[i++] = bucket[k][l];
}
}
buckElementCounts[k] = 0;
}
n = n *10;
}
}
}
java基数排序
最新推荐文章于 2024-07-08 17:49:05 发布