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; } } } }}
原文地址:https://www.cnblogs.com/fuqiang-java/p/12311124.html
时间: 2024-11-13 05:52:45