java数据结构-排序算法-基数算法

package com.kuang;

import java.util.Arrays;

/**
* @auther 付强
* @date 2020/2/15 - 10:46
*/
public class RadixSort {
public static void main(String[] args) {
int[] arr=new int[]{23,6,189,45,9,289,56,1,789,32,65,652,5};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr){
//存数组中最大的数字
int max=Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if(arr[i]>max){
max=arr[i];
}
}
//知道最大数字是几位数
int maxlength=(max+"").length();
//用于存储临时数据的数组
int[][] temp=new int[10][arr.length];
System.out.println(maxlength);
//根据最大长度的数决定比较的次数
int[] counts=new int[10];
for (int i = 0,n=1; i < maxlength; i++,n*=10) {
//把每一个数字分别计算余数
for (int j=0;j<arr.length;j++){
//拿出余数
int i1 = arr[j] / n % 10;
//把当前遍历的数据放到指定的数组中
temp[i1][counts[i1]]=arr[j];
//记录数量
counts[i1]++;
}
if(i==0){
for(int []nums:temp){
System.out.println(Arrays.toString(nums));
}
System.out.println(Arrays.toString(counts));
}
//记录取得元素需要放的位置
int index=0;
//把数字取出来
for (int i1 = 0; i1 < counts.length; i1++) {
//记录数量的数组中当前余数记录的数量不为0
if(counts[i1]!=0){
//循环取出元素
for (int l=0;l<counts[i1];l++){
//取出元素
arr[index]=temp[i1][l];
index++;
}
//把数量值为0
counts[i1]=0;
}
}
}
}
}

猜你喜欢

转载自www.cnblogs.com/fuqiang-java/p/12311124.html