基数排序

import java.util.Arrays;

public class MultiKeyRadixSort
{
/**
* @param data 待排序的数组
* @param radix  指定关键字拆分的进制。如radix=10,表明按10进制拆分
* @param d 指定将关键字拆分成几个子关键字
*/
public static void radixSort(int[] data, int radix, int d) 
{
System.out.println("开始排序:");
int arrayLength = data.length;
//需要一个临时数组
int[] tmp = new int[arrayLength];
//buckets数组是桶式排序必须buckets数组
int[] buckets = new int[radix];
//依次从最高位的子关键字对待排数据进行排序
//下面循环中rate用于保存当前计算的位(比如十位时rate=10)
for(int i = 0 , rate = 1 ; i < d ; i++)
{
//重置count数组,开始统计第二个关键字
Arrays.fill(buckets, 0);
//将data数组的元素复制到temporary数组中进行缓存
System.arraycopy(data, 0, tmp, 0, arrayLength);
//计算每个待排序数据的子关键字
for(int j = 0 ; j < arrayLength ; j++)
{
//计算数据指定位上的子关键字
int subKey = (tmp[j] / rate) % radix;
buckets[subKey]++;
}
for(int j = 1 ; j < radix ; j++)
{
buckets[j] = buckets[j] + buckets[j-1];
}
//按子关键字对指定数据进行排序
for(int m = arrayLength - 1 ; m >= 0 ; m--)
{
int subKey = (tmp[m] / rate) % radix;
data[--buckets[subKey]] = tmp[m];
}
System.out.println("对" + rate + "位上子关键字排序:" 
+ java.util.Arrays.toString(data));
rate *= radix;
}
}
public static void main(String[] args)
{
int[] data = {1100 , 192 , 221 , 12 , 13};
System.out.println("排序之前:\n"
+ java.util.Arrays.toString(data));
radixSort(data , 10 , 4);
System.out.println("排序之后:\n" 
+ java.util.Arrays.toString(data));
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值