基数排序算法

package sort;

import java.util.Arrays;

/**
 * RadixSort
 * 基数排序算法:
 * 基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序
 *
 */

public class RadixSort
{
    private int countStep = 0;
    
    public void sort(int[] initData)
    {
        int radix = 10;//采用十进制的数字
        int digit = 4;//测试数据的位数
        int len = initData.length;
        
        // 缓存数组
        int[] tmp = new int[len];
        // buckets用于记录待排序元素的信息
        int[] buckets = new int[radix];

        for (int i = 0, rate = 1; i < digit; i++) 
        {
            // 重置count数组,开始统计下一个关键字
            Arrays.fill(buckets, 0);
            
            // 将initData中的元素完全复制到tmp数组中
            for (int j=0; j<len; j++)
            {
                tmp[j] = initData[j];
            }

            // 计算每个待排序数据的子关键字
            for (int j = 0; j < len; j++) 
            {
                int subKey = (tmp[j] / rate) % radix;
                buckets[subKey]++;
                countStep ++;
            }

            for (int j = 1; j < radix; j++) 
            {
                buckets[j] = buckets[j] + buckets[j - 1];
                countStep ++;
            }

            // 按子关键字对指定的数据进行排序
            for (int m = len - 1; m >= 0; m--)
            {
                int subKey = (tmp[m] / rate) % radix;
                initData[--buckets[subKey]] = tmp[m];
                countStep ++;
            }
            rate *= radix;
        }
    }

    public int showStep()
    {
        return countStep;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值