基数排序radix sort

基数排序

代码

class Sort8{
    //基数排序bucketSort,分为 LSD和MSD,即按最低位优先或最高位排序优先
    //按个位(起)将数字装箱,进行记录
    //依次按位数重复排序,直到排完;
    public void bucketSort(int[] number) {
        //创建10个桶
        int[][] a = new int[10][number.length];
        int b = maxNumber(number);
        int c = getNumberTimes(b);
        int d = 1;//位数
        int e=0;
        int n = 1;//个位
        while (d <= c) {
            for (int i = 0; i < number.length; i++) {
                int x = (number[i] / n) % 10;
                a[x][e] = number[i];
                 e++;
            }
            int k = 0;
            for (int i = 0; i < 10; i++) {//桶中数放入数组
                if (e >= 0) {
                    for (int j = 0; j < number.length; j++) {
                        if (a[i][j] != 0) {
                            number[k] = a[i][j];
                            k++;
                            e--;
                        }
                    }
                }
            }
            n*=10;
            d++;
        }
    }
    public int maxNumber(int[] number){//获得最大值
        int max=number[0];
        for (int i=1;i<number.length;i++)
            if(max<number[i])
                max=number[i];
            return max;
    }
    public int getNumberTimes(int maxNumber){//获得最大位数
        int count=1;
        int temp=maxNumber/10;
        while (temp!=0){
            temp=temp/10;
            count++;
        }
        return count;
    }

    }

存在问题

目前所写代码只适合对大于零的数进行排序,待完善。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章