Java数据结构和算法-基数排序

基数排序:

基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。
具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

步骤:首先求出该序列最高位数,例如本例最高位百位,计数count=3

1. 按照个位数进行排序。
2. 按照十位数进行排序。
3. 按照百位数进行排序。
排序后,数列就变成了一个有序序列。

基数排序Java实现:

package com.algorithm.sort;

import java.util.ArrayList;

public class BasicSort {
    public static void main(String[] args) {
        int[] a={34,2,4,5,7,45,44,12,145,347,47,556,78,67,55,89,10,23};
        basicSort(a);
        for(int num:a){
            System.out.print(" "+num);
        }
    }

    private static void basicSort(int[] a) {
        int max=0;
        int count=0;
        //求该数组最大数,以便求出最大位数
        for(int i=0;i<a.length;i++){
            if(max<a[i]){
                max=a[i];
            }
        }
        //求最大位数
        while(max!=0){
            count++;
            max/=10;
        }
        //建立二维数组
        ArrayList<ArrayList> listOut=new ArrayList<ArrayList>();
        for(int i=0;i<10;i++){
            ArrayList listInner=new ArrayList();
            listOut.add(listInner);
        }

        for(int i=0;i<count;i++){
            for(int j=0;j<a.length;j++){
                //求各个位对应的数字
                int x=a[j]%(int)Math.pow(10,i+1)/(int)Math.pow(10,i);
                ArrayList arrayList=listOut.get(x);
                arrayList.add(a[j]);
                listOut.set(x,arrayList);//待定测试
            }
            int c=0;
            for(int m=0;m<10;m++){
                while (listOut.get(m).size()>0){//注意循环
                    a[c++]=(int)listOut.get(m).remove(0);
                }

            }
        }

    }
}
输出: 2 4 5 7 10 12 23 34 44 45 47 55 67 78 89 145 347 556

猜你喜欢

转载自blog.csdn.net/Colin_Qichao/article/details/81436295