码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-02-15 13:50:03      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:循环   pre   次数   rgs   java   max   个数   比较   dex   

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

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

标签:循环   pre   次数   rgs   java   max   个数   比较   dex   

原文地址:https://www.cnblogs.com/fuqiang-java/p/12311124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!