java 版基数排序

package com.link.sort;

import java.util.Random;

/**
 * @Author sunzy
 * @DATE Create in  2019/9/17 18:17
 */
public class BaseSort {
    private static void baseSort(int[] arr) {
      int[] order = new int[10];
      int n=1;
      int d=getMaxD(arr);
      int [][] backet=new int[10][arr.length];
      while(n<d){
          for(int i=0;i<arr.length;i++){
              int digit=(arr[i]/n)%10;
              backet[digit][order[digit]]=arr[i];
              order[digit]++;
          }
          int j = 0;
          for(int i=0;i<order.length;i++){
               while(order[i]>0){
                   for(int m=0;m<order[i];m++){
                       arr[j]=backet[i][m];
                       j++;
                   }
                   order[i]=0;
               }
          }
          n=n*10;
      }
    }

    private static int getMaxD(int[] arr) {
        return 10000;
    }

    private static void printarr(int[] arr) {
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]);
            System.out.print(",");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        Random random = new Random();
        int []arr = new int[20];
        for(int i=0;i<20;i++){
            arr[i]=random.nextInt(5000);
        }
        printarr(arr);
        baseSort(arr);
        printarr(arr);
    }
}

运行结果:

1427,4988,3294,4342,1443,2343,624,4824,2771,3270,332,44,2300,2094,4702,3816,4611,1098,2907,811,
44,332,624,811,1098,1427,1443,2094,2300,2343,2771,2907,3270,3294,3816,4342,4611,4702,4824,4988,

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值