基數(shù)排序(radix sort)

基數(shù)排序思想

如果我們有N個(gè)整數(shù)递雀,范圍從1M(或從1M - 1)柄延,我們可以利用這個(gè)信息得到一種快速的排序,叫做桶式排序(bucket sort)缀程。我們留置一個(gè)數(shù)組搜吧,稱之為Count,大小為M市俊,并初始化為0。于是滤奈,Count有M個(gè)單元摆昧,開始時(shí)他們都是空的。當(dāng)A[i]被讀入時(shí)Count[A[i]]增1蜒程。在所有的輸入被讀進(jìn)后绅你,掃描數(shù)組Count,打印輸出排好的表。

代碼實(shí)現(xiàn)(C語(yǔ)言)

LMD(最低位優(yōu)先法)

#include<stdio.h>
#include<math.h>

int main(void)
{
    int a [] = {3,15,18,10,34,20,13,20,100,254,486,598 };
    int * p = a;
    //計(jì)算數(shù)組長(zhǎng)度
    int size = sizeof(a) / sizeof(int);
    //基數(shù)排序
    bucketSort3(p,size);
    //打印排序結(jié)果
    int i;
    for(i = 0; i < size; i++)
        printf("%d\n",a[i]);

    return 0;
}


//基數(shù)排序
void bucketSort3(int * p, int n)
{
    //獲取數(shù)組中的最大數(shù)
    int maxNum = findMax(p,n);
    //獲取分配次數(shù)
    int times = getTimes(maxNum);
    int i;
    printf("times:%d\n",times);
    for(i = 1; i <= times; i++)
        sort2(p,n,i);
}

int getTimes(int num)
{
    int count = 1;
    int temp = num / 10;
    while(temp != 0)
    {
        count++;
        temp= temp / 10;
    }

    return count;
}

int findMax(int * p,int n)
{
    int i;
    int max = 0;

    for(i = 0;i < n; i++)
    {
        if (p[i] > max)
            max = p[i];
    }
    return max;
}

//將數(shù)字按位數(shù)分配到各自的桶中搞糕,按桶的順序輸出排序結(jié)果

void sort2(int * p,int n, int loop)
{
    // 預(yù)設(shè)桶的大小
    int buckets[10][20] = {};
    int tempNum = (int)pow(10,loop - 1);
    int i,j;

    for(i = 0; i < n; i++ )
    {
        int index = (p[i] / tempNum) % 10;
        for(j = 0; j < 20; j++)
         {
             if(buckets[index][j] == NULL)
        {
            buckets[index][j] = p[i];
            break;
        }
         }

    }

    //將桶中的數(shù)勇吊,倒回到原有數(shù)組中

    int k = 0;

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 20; j++)
        {
            if (buckets[i][j] != NULL)
            {
                p[k] = buckets[i][j];
                buckets[i][j] = NULL;
                k++;
            }


        }
    }
}

測(cè)試結(jié)果

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窍仰,隨后出現(xiàn)的幾起案子汉规,更是在濱河造成了極大的恐慌,老刑警劉巖驹吮,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件针史,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碟狞,警方通過(guò)查閱死者的電腦和手機(jī)啄枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)族沃,“玉大人频祝,你說(shuō)我怎么就攤上這事〈嘌停” “怎么了常空?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)盖溺。 經(jīng)常有香客問(wèn)我漓糙,道長(zhǎng),這世上最難降的妖魔是什么烘嘱? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任昆禽,我火速辦了婚禮,結(jié)果婚禮上蝇庭,老公的妹妹穿的比我還像新娘醉鳖。我一直安慰自己,他們只是感情好哮内,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布盗棵。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漾根。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天鲫竞,我揣著相機(jī)與錄音辐怕,去河邊找鬼。 笑死从绘,一個(gè)胖子當(dāng)著我的面吹牛寄疏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僵井,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼陕截,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了批什?” 一聲冷哼從身側(cè)響起农曲,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驻债,沒想到半個(gè)月后乳规,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡合呐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年暮的,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淌实。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冻辩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拆祈,到底是詐尸還是另有隱情恨闪,我是刑警寧澤譬正,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布燕少,位于F島的核電站,受9級(jí)特大地震影響霉祸,放射性物質(zhì)發(fā)生泄漏轻姿。R本人自食惡果不足惜犁珠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望互亮。 院中可真熱鬧犁享,春花似錦、人聲如沸豹休。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凤巨,卻和暖如春视乐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敢茁。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工佑淀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彰檬。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓伸刃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逢倍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捧颅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,743評(píng)論 0 33
  • 基本思想: 基數(shù)排序是一種有意思的排序较雕,在看過(guò)其它比較排序后碉哑,基數(shù)排序真的很有意思。 基數(shù)排序(Radix Sor...
    NEXTFIND閱讀 17,462評(píng)論 1 10
  • 一些概念 該算法是穩(wěn)定的排序法亮蒋; 在所有的情況下谭梗,時(shí)間復(fù)雜度均為O(nlog(p)k),空間復(fù)雜度為O(n*p)(...
    假裝會(huì)編程閱讀 1,042評(píng)論 0 0
  • 總結(jié)一下常見的排序算法宛蚓。 排序分內(nèi)排序和外排序激捏。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,338評(píng)論 0 1
  • 時(shí)鐘的鐘擺, 從來(lái)不曾停過(guò)痕钢, 現(xiàn)在的每一秒鐘图柏, 都是下一秒的過(guò)去, 今晚的月亮任连, 也會(huì)是明天的過(guò)去蚤吹, 未來(lái)的總是在...
    瀟瀟暮雨未歇閱讀 185評(píng)論 0 0