基数排序(Java版)

实现思路:

代码实现:

import java.util.Arrays;

/**
 * @Author: PurcellHuang
 * @Date: 2019-08-08 13:28
 * 基数排序
 */
public class RadixSort {

    public static void sort(int[]a){
        int maxNum = Integer.MIN_VALUE;
        //找数组中最大值
        for (int i = 0; i < a.length; i++){
            if (a[i] > maxNum){
                maxNum = a[i];
            }
        }
        //System.out.println(maxNum);
        int maxRadix = (maxNum+"").length();    //最高位数
        //System.out.println(maxRadix);
        int [][]b = new int[10][a.length];          //桶
        int [] count = new int[10];       //记录桶的数据index

        for (int i = 0, n = 1; i < maxRadix; i++,n*=10){

            //计算余数并放桶里
            for (int j = 0; j < a.length; j++){
                int ys = a[j]/n%10;
                b[ys][count[ys]++] = a[j];
            }
            //把桶中数据放回数组
            int index = 0;
            for (int k = 0; k < count.length; k++){
                if(count[k]!=0){
                    for(int l = 0; l < count[k]; l++){
                        a[index++] = b[k][l];
                    }
                    count[k] = 0;
                }
            }
        }




    }

    public static void main(String[] args) {
        int []a = {2,4,5,2,1,88,8,9,21,2,5};
        RadixSort.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

发布了18 篇原创文章 · 获赞 7 · 访问量 4196

猜你喜欢

转载自blog.csdn.net/weixin_37267014/article/details/99294157