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;                }            }        }    }}

相关推荐