排序算法-基数排序,2024年最新java多线程实战指南pdf

第一轮排序:将每个数个位取出,看这个数应该放在哪个桶

按照数组下标,取出数据,放入原来数组

{542,53,3,14,241,748}

第二轮:按十位取出,十位没数则补0,在取出放入原来数组

{3,14,214,542,748,53}

{3,14,53,214,542,748}

排序代码实现


package sort;



import java.util.Arrays;



public class RadixSort {

    public static void main(String[] args) {

        int arr[] = {53,3,542,748,14,214};

        radicSort(arr);

    }

    //基数排序方法

    public static void radicSort(int[] arr){

        //第一轮  定义一个二维数组表示10个桶    用空间换时间

        int[][] bucket = new int[10][arr.length];

        //为了记录桶中数据多少  定义一个一维数组记录个数

        int[] bucketCounts = new int[10];

        for(int j = 0;j < arr.length;j++){

            //取出元素个位

            int num = arr[j]%10;

            //放入对应桶中

            bucket[num][bucketCounts[num]] = arr[j];

            bucketCounts[num]++;

        }

        //一次取出放回数组中

        int index = 0;

        for (int k = 0;k < bucketCounts.length;k++){

            //如果桶中有数据才放入到元素

            if (bucketCounts[k] != 0){

                for (int l = 0;l < bucketCounts[k];l++){

                    arr[index++] = bucket[k][l];

                }

            }

            bucketCounts[k] = 0;

        }

        System.out.println("对个位排序"+ Arrays.toString(arr));

        //第二轮

        for(int j = 0;j < arr.length;j++){

            //取出元素个位

            int num = arr[j]/10%10;

            //放入对应桶中

            bucket[num][bucketCounts[num]] = arr[j];

            bucketCounts[num]++;

        }

        //一次取出放回数组中

        index = 0;

        for (int k = 0;k < bucketCounts.length;k++){

            //如果桶中有数据才放入到元素

            if (bucketCounts[k] != 0){

                for (int l = 0;l < bucketCounts[k];l++){

                    arr[index++] = bucket[k][l];

                }

            }

            bucketCounts[k] = 0;

        }

        System.out.println("对十位排序"+ Arrays.toString(arr));

        //第三轮

        for(int j = 0;j < arr.length;j++){

            //取出元素个位

            int num = arr[j]/100%10;

            //放入对应桶中

            bucket[num][bucketCounts[num]] = arr[j];

            bucketCounts[num]++;

        }

        //一次取出放回数组中

        index = 0;

        for (int k = 0;k < bucketCounts.length;k++){

            //如果桶中有数据才放入到元素

            if (bucketCounts[k] != 0){

                for (int l = 0;l < bucketCounts[k];l++){

                    arr[index++] = bucket[k][l];

                }

            }

            bucketCounts[k] = 0;

        }

        System.out.println("对百位排序"+ Arrays.toString(arr));

    }

}



总结代码实现


package sort;



import java.util.Arrays;



public class RadixSort {

    public static void main(String[] args) {

        int arr[] = {53,3,542,748,14,214};

        radicSort(arr);

    }

    //基数排序方法

    public static void radicSort(int[] arr){

        //得到数组中最大位数

        int max = arr[0];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值