import java.util.Arrays;
public class jishu {
public static void main(String[] args) {
int[] arr = {53, 3, 542, 748, 14, 214};
// sort(arr);
sort2(arr);
System.out.println(Arrays.toString(arr));
}
//基数排序
public static void sort(int[] arr) {
//先创建一个二维数组
int[][] bucket = new int[10][arr.length];
//创建一个一维数组记录每个桶里有多少个数
int[] tongji = new int[10];
//遍历数组,将元素放入桶中
for (int i = 0; i < arr.length; i++) {
//获取个位数
int ge = arr[i] % 10;
//放入
bucket[ge][tongji[ge]] = arr[i];
tongji[ge]++;
}
//定义一个索引 存放数据
int index = 0;
//从桶中取出数据
for (int i = 0; i < tongji.length; i++) {
//判断桶里是否为空
if (tongji[i] != 0) {
//说明桶里有数据 遍历桶
for (int j = 0; j < tongji[i]; j++) {
arr[index] = bucket[i][j];
index++;
}
//清空桶里数据
tongji[i] = 0;
}
}
System.out.println("第一轮为:" + Arrays.toString(arr));
System.out.println("++++++++++++++++++++++++++++++++++++++++");
//遍历数组,将元素放入桶中
for (int i = 0; i < arr.length; i++) {
//获取个位数
int ge = arr[i] / 10 % 10;
//放入
bucket[ge][tongji[ge]] = arr[i];
tongji[ge]++;
}
//定义一个索引 存放数据
//int index = 0;
//从桶中取出数据
index = 0;
for (int i = 0; i < tongji.length; i++) {
//判断桶里是否为空
if (tongji[i] != 0) {
//说明桶里有数据 遍历桶
for (int j = 0; j < tongji[i]; j++) {
arr[index] = bucket[i][j];
index++;
}
//清空桶里数据
tongji[i] = 0;
}
}
System.out.println("第二轮为:" + Arrays.toString(arr));
System.out.println("++++++++++++++++++++++++++++++++++++++++");
//遍历数组,将元素放入桶中
for (int i = 0; i < arr.length; i++) {
//获取个位数
int ge = arr[i] / 100 % 10;
//放入
bucket[ge][tongji[ge]] = arr[i];
tongji[ge]++;
}
//定义一个索引 存放数据
//int index = 0;
//从桶中取出数据
index = 0;
for (int i = 0; i < tongji.length; i++) {
//判断桶里是否为空
if (tongji[i] != 0) {
//说明桶里有数据 遍历桶
for (int j = 0; j < tongji[i]; j++) {
arr[index] = bucket[i][j];
index++;
}
//清空桶里数据
tongji[i] = 0;
}
}
System.out.println("第三轮为:" + Arrays.toString(arr));
}
//基数排序2
public static void sort2(int[] arr) {
/* //获取数组最大位数方法一
int maxWei = getMax(arr);*/
//获取最大位数方法二
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
int maxWei = (max + "").length();
for (int t = 1, n = 1; t <= maxWei; t++, n = n * 10) {
//先创建一个二维数组
int[][] bucket = new int[10][arr.length];
//创建一个一维数组记录每个桶里有多少个数
int[] tongji = new int[10];
//遍历数组,将元素放入桶中
for (int i = 0; i < arr.length; i++) {
//获取个位数
int ge = arr[i] / n % 10;
//放入
bucket[ge][tongji[ge]] = arr[i];
tongji[ge]++;
}
//定义一个索引 存放数据
int index = 0;
//从桶中取出数据
for (int i = 0; i < tongji.length; i++) {
//判断桶里是否为空
if (tongji[i] != 0) {
//说明桶里有数据 遍历桶
for (int j = 0; j < tongji[i]; j++) {
arr[index] = bucket[i][j];
index++;
}
//清空桶里数据
tongji[i] = 0;
}
}
}
}
//获取数组中最大数的位数
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("最大数为:" + max);
int temp = 0;
for (int i = 0; ; i++) {
max = max / 10;
if (max >= 0) {
temp = temp + 1;
}
if (max <= 0) {
break;
}
}
return temp;
}
}
Java数据结构--基数排序
最新推荐文章于 2024-10-19 22:23:18 发布