基数排序(只适合整数)

通常比较大小,我们直接就找到最大的位数的数。假设所有的数的位数都相同,根据对10的幂去模,从而保存进不同的集合;随着10的次幂的不断增大,数组排序完成了。

    /**
     *基数排序:
     *核心思想: 
     *   1.首先获取最大的绝对值的数
     *   2.求出最大的绝对值的数,是10的times次幂。
     *   3.建立19个集合,分别保存个位是(-9,-8,-7,……,1,2,3,……8,9)的数
     *   4. 根据times次幂建立外层循环for(int i=0;;)
     *      a. 获取对应的位的值  
     *      b. 把每个数添加进相应的集合
     *   5.收集数据
     * @param array
     */
    public void basicSort(int [] array) {
        if(array == null && array.length ==0) {
            return ;
        }
        int max =0;
        //1获取最大的绝对值的数
        for(int i =0;i<array.length;i++) {
            if(Math.abs(max)abs(array[i])) {
                max = array[i];
            }
        }
        int times = 0;
        if(max<0) max = -max;
        //2求出最大的绝对值的数,是10的times次幂。
        while(max >0) {
            max = max/10;
            times ++;
        }
        List queue = new ArrayList();
        //3建立19集合,分别保存个位是(-9,-8,-7,……,1,2,3,……8,9)的数
        for(int i =0;i<20;i++) {
            ArrayList q = new ArrayList();
            queue.add(q);
        }
        //4根据位数循环
        for(int i =0 ;i//把每个数添加进相应的集合
            for(int j =0; j<array.length;j++) {
                //4.1获取对应的位的值
                int x = array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
                ArrayList q = queue.get(10+x);
                //4.2把每个数添加进相应的集合
                q.add(array[j]);
                queue.set(10+x, q);
            }
            //5开始收集
            int count=0;
            for(int j =0;j<20;j++) {
                while(queue.get(j).size()>0) {
                    ArrayList q = queue.get(j);
                    array[count] = q.get(0);
                    q.remove(0);
                    count++;
                }
            }
        }
    }

你可能感兴趣的:(基数排序(只适合整数))