基數(shù)排序

百度:

基數(shù)排序(radix sort)屬于“分配式排序”(distribution sort)畦攘,又稱“桶子法”(bucket sort)或bin sort霸妹,顧名思義,它是透過鍵值的部份資訊知押,將要排序的元素分配至某些“桶”中叹螟,藉以達(dá)到排序的作用,基數(shù)排序法是屬于穩(wěn)定性的排序台盯,其時間復(fù)雜度為O (nlog(r)m)罢绽,其中r為所采取的基數(shù),而m為堆數(shù)爷恳,在某些時候有缆,基數(shù)排序法的效率高于其它的穩(wěn)定性排序法。

理解:

把一個待排序的數(shù)組按照從個位温亲、十位......進(jìn)行分類棚壁,再按每次分類從0-9(個位、十位......)進(jìn)行排序栈虚,依次進(jìn)行袖外,直到數(shù)組中最大數(shù)的位數(shù)排序完。

步驟:

  • 先找出數(shù)組中最大數(shù)魂务,求出位數(shù)曼验,即需要分配的次數(shù)。
  • 定義一個二維的臨時數(shù)組粘姜,第一維用來存放0-9的正在分配的類別鬓照,長度為10,第二維用來從數(shù)組中提取出來的數(shù)孤紧,因?yàn)樵诜峙淝笆遣恢?-9各自有多少數(shù)豺裆,所以定義第二維的長度為數(shù)組的長度。
  • 定義一個長度為10的數(shù)組号显,用來存放每次分配到二維數(shù)組時臭猜,每個維度的長度,作為下次同樣類別存放的下標(biāo)押蚤。
  • 根據(jù)求出的分配次數(shù)進(jìn)行for循環(huán)遍歷誊册,此時需要在定義一個變量n腮考,初始為1,用來根據(jù)每次遍歷分別類乘于10(比如第一次為1帅戒,恕稠、1%10得到個位數(shù),依次類推)。
  • 將得到的位數(shù)作為二維數(shù)組的第一維下標(biāo),第二維下標(biāo)為上面的長度為10數(shù)組對應(yīng)位數(shù)的值偎肃,用來存放當(dāng)前判斷的數(shù)字煞烫。
  • 定義一個變量 index浑此,用來記錄取得到的數(shù)字要存放的位置,存放后的數(shù)組將覆蓋原來要分配的數(shù)組滞详。
  • 使用兩個for循環(huán)凛俱,用來取出二維數(shù)組里記錄的數(shù)組。
  • 當(dāng)分配完一個類別后料饥,要將記錄數(shù)組長度的數(shù)組用到的下標(biāo)歸為0蒲犬,用于下次的使用。

演示:

image.png

Jvav代碼:

package com.company;

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{5, 45, 87, 32, 9, 7, 159, 324, 4, 107, 69,58};
        Main.base(arr);
        System.out.println(Arrays.toString(arr));
    }

    private static void base(int[] arr) {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        //計(jì)算最大數(shù)字是幾位數(shù)
        int count = (max + "").length();
        //用來臨時存放數(shù)據(jù)的數(shù)組
        int[][] temp = new int[10][arr.length];
        //用于記錄在temp中相應(yīng)的數(shù)組中存放數(shù)字的數(shù)量
        int[] counts = new int[10];
        //根據(jù)最長長度的數(shù)決定比較次數(shù)
        for (int j = 0, n = 1; j < count; j++,n *= 10) {
            //把每個數(shù)字分別計(jì)算余數(shù)
            for (int d = 0;d<arr.length;d++){
                //計(jì)算余數(shù)
                int yu = arr[d]/n%10;
                //把當(dāng)前遍歷的數(shù)字存放在指定位置的數(shù)組中
                temp[yu][counts[yu]] = arr[d];
                //記錄數(shù)字
                counts[yu]++;
            }
            //記錄取出元素要放在原數(shù)組的位置
            int  index = 0;
            //把數(shù)組從二維數(shù)組取出來
            for (int k = 0;k<counts.length;k++){
                //判斷記錄的數(shù)組是否有記錄
                if (counts[k]!=0){
                    //若有 則以記錄該數(shù)組下標(biāo)對應(yīng)值為當(dāng)前位數(shù)的數(shù)量
                    for (int l =0;l<counts[k];l++){
                        //取出元素
                        arr[index]=temp[k][l];
                        //移動下標(biāo)
                        index++;
                    }
                    //遍歷完岸啡,清空原叮,下個位數(shù)記錄需要
                    counts[k]=0;
                }
            }

        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巡蘸,隨后出現(xiàn)的幾起案子奋隶,更是在濱河造成了極大的恐慌,老刑警劉巖悦荒,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯欣,死亡現(xiàn)場離奇詭異,居然都是意外死亡搬味,警方通過查閱死者的電腦和手機(jī)境氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碰纬,“玉大人萍聊,你說我怎么就攤上這事≡梦觯” “怎么了寿桨?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長她按。 經(jīng)常有香客問我牛隅,道長,這世上最難降的妖魔是什么酌泰? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任媒佣,我火速辦了婚禮,結(jié)果婚禮上陵刹,老公的妹妹穿的比我還像新娘默伍。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布也糊。 她就那樣靜靜地躺著炼蹦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狸剃。 梳的紋絲不亂的頭發(fā)上掐隐,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音钞馁,去河邊找鬼虑省。 笑死,一個胖子當(dāng)著我的面吹牛僧凰,可吹牛的內(nèi)容都是我干的探颈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼训措,長吁一口氣:“原來是場噩夢啊……” “哼伪节!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绩鸣,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怀大,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后全闷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉寂,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年总珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了屏鳍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡局服,死狀恐怖钓瞭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淫奔,我是刑警寧澤山涡,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站唆迁,受9級特大地震影響鸭丛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唐责,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一鳞溉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鼠哥,春花似錦熟菲、人聲如沸看政。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽允蚣。三九已至,卻和暖如春呆贿,著一層夾襖步出監(jiān)牢的瞬間嚷兔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工榨崩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谴垫,地道東北人章母。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓母蛛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乳怎。 傳聞我的和親對象是個殘疾皇子彩郊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355