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; } } } }}
相关推荐
LauraRan 2020-09-28
yangkang 2020-11-09
lbyd0 2020-11-17
sushuanglei 2020-11-12
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
wushengyong 2020-10-28
lizhengjava 2020-11-13
星月情缘 2020-11-13
huangxiaoyun00 2020-11-13
luyong0 2020-11-08
腾讯soso团队 2020-11-06
Apsaravod 2020-11-05
PeterChangyb 2020-11-05
gaobudong 2020-11-04
wwwjun 2020-11-02
gyunwh 2020-11-02
EchoYY 2020-10-31