码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构Java版之基数排序(四)

时间:2018-06-19 13:47:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:算法   计算   str   ISE   数据   数组元素   ret   就是   基数排序   

基数排序:

  基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排。这里介绍第一种LSD排序算法。

首先,我们先了解什么是基数。基数是根据具体的排序情况而定的,比如我们常见的基数是十进制-10,还有二进制-2。

其次,要熟记基数排序的思想:通过对每一个位上的值相排序,就可以完成对整个数组的排序。

  基数排序的算法实现流程:遍历所有数组元素,找出元素最大的位值 -------->从低位到高位把数组元素上的位值存入链表中-------->遍历所有链表,将链表里面的值重新赋值给数组,再情况链表。

  例如:对数组   int[ ]  data = {421, 240, 35, 532, 305, 430, 124};进行排序,首先我们要做的是对个位上的数值进行排序。

第一遍排序的结果为:  240 430 421 532 124 35 305 

再进行十位上的数值排序:

第二遍排序的结果为:  305 421 124 430 532 35 240

再进行百位上的数值排序:

第三遍排序的结果为:  35 124 240 305 421 430 532 

最后我们的到的排序结果就是: 35 124 240 305 421 430 532 

至此,已经完成了对数组的排序

  附源码:

public class RadixSort {
    @Test
    public void fun() {
        int[] n = {421, 240, 35, 532, 305, 430, 124};
        radixSort(n);
        for(int i : n) {
            System.out.print(i + " ");
        }
    }
    //实现基数排序 LSD-从最低位开始排 MSD-从最高位开始排
    public void radixSort(int[] data) {
        int maxBin = maxBin(data);
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        for(int i  = 0; i < 10; i ++) {
            list.add(new ArrayList<Integer>());
        }
        for(int i = 0, factor = 1; i < maxBin; factor *= 10, i ++) {
            for(int j = 0; j < data.length; j ++) {
                list.get((data[j]/factor)%10).add(data[j]);
            }
            for(int j = 0, k = 0; j < list.size(); j ++) {
                while(!list.get(j).isEmpty()) {
                    data[k] = list.get(j).get(0);
                    list.get(j).remove(0);
                    k ++;
                }
            }
        }
    }
    //计算数组里元素的最大位数
    public int maxBin(int[] data) {
        int maxLen = 0;
        for(int i = 0; i < data.length; i ++) {
            int size = Integer.toString(data[i]).length();
            maxLen =  size > maxLen ? size : maxLen;
        }
        return maxLen;
    }
}

 

数据结构Java版之基数排序(四)

标签:算法   计算   str   ISE   数据   数组元素   ret   就是   基数排序   

原文地址:https://www.cnblogs.com/ranter/p/9197983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!