基数排序算法

经典排序算法 - 基数排序Radix sort

原理类似桶排序,这里总是需要10个桶,多次使用

首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数

例如

待排序数组[62,14,59,88,16]简单点五个数字

分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样

|  0  |  0  | 62 |  0  | 14 |  0  | 16 |  0  |  88 | 59 |

|  0  |  1  |  2  |  3  |  4 |  5  |  6  |  7  |  8  |  9  |桶编号

将桶里的数字顺序取出来,

输出结果:[62,14,16,88,59]

再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:

由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序

|  0  | 14,16 |  0  |  0  |  0  | 59 | 62  | 0  | 88  |  0  |

|  0  |  1      |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |桶编号


因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可

最后输出结果:[14,16,59,62,88]

 

代码实现:

 
 
  1. public class RadixSort {   
  2. public static void sort(int[] number, int d) {   
  3. int k=0;   
  4. int n=1;   
  5. int m=1;   
  6. int[][] temp = new int[number.length][number.length];   
  7. int[] order = new int[number.length];   
  8. while(m <= d) {   
  9. for(int i = 0; i < number.length; i++) {   
  10. int lsd = ((number[i] / n) % 10);   
  11. temp[lsd][order[lsd]] = number[i];   
  12. order[lsd]++;   
  13. }   
  14. for(int i = 0; i < d; i++) {   
  15. if(order[i] != 0)   
  16. for(int j = 0; j < order[i]; j++) {   
  17. number[k] = temp[i][j];   
  18. k++;   
  19. }   
  20. order[i] = 0;   
  21. }   
  22. n *= 10;   
  23. k = 0;   
  24. m++;   
  25. }   
  26. }   
  27. public static void main(String[] args) {   
  28. int[] data =   
  29. {7322934355142865398133100};   
  30. RadixSort.sort(data, 10);   
  31. for(int i = 0; i < data.length; i++) {   
  32. System.out.print(data[i] + " ");   
  33. }   

 

基数排序一般仅是用于记录的关键字为整数类型的情况。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值