基數排序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;
    }

    }

存在問題

目前所寫代碼只適合對大於零的數進行排序,待完善。

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