青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

基數排序

今天學了基數排序,據說他的時間復雜度也是O(n),他的思路就是:
沒有計數排序那么理想,我們的數據都比較集中,都比較大,一般是4,5位。基本沒有小的數據。
那我們的處理很簡單,你不是沒有小的數據嘛。我給一個基數,例如個位,個位都是[0-10)范圍內的。先對他進行歸類,把小的放上面,大的放下面,然后個位排好了,在來看10位,我們也這樣把小的放上面,大的放下面,依次內推,直到最高位排好。那么不就排好了嗎?我們只需要做d(基數個數)的循環就可以了。時間復雜度相當于O(d * n) 因為d為常量,例如5位數,d就是5.所以近似為O(n)的時間復雜度。這次自己寫個案例:

最初的數據

排好個位的數據

排好十位的數據

排好百位的數據

981

981

725

129

387

753

129

387

753

955

753

456

129

725

955

725

955

456

456

753

725

387

981

955

456

129

387

981

這里只需循環3次就出結果了。

<!--[if !supportLists]-->3.       <!--[endif]-->但是注意,我們必須要把個位排好。但是個位怎么排呢?這個是個問題。書上說的是一疊一疊的怎么合并,我是沒有理解的。希望知道的有高手教我一下。

我是用的一個計數排序來排各位的,然后排十位。效率應該也低不到哪里去。呵呵。。

思路就這樣咯。奉上源代碼:

 

#include <stdio.h>
#include 
<stdlib.h>

//計數排序,npRadix為對應的關鍵字序列,nMax是關鍵字的范圍。npData是具體要
//排的數據,nLen是數據的范圍,這里必須注意npIndex和npData對應的下標要一致
//也就是說npIndex[1] 所對應的值為npData[1]
int RadixCountSort(int* npIndex, int nMax, int* npData, int nLen)
{
    
//這里就不用說了,計數的排序。不過這里為了是排序穩定
    
//在標準的方法上做了小修改。

    
int* pnCount  = (int*)malloc(sizeof(int)* nMax);        //保存計數的個數
    for (int i = 0; i < nMax; ++i)
    {
        pnCount[i] 
= 0;
    }
    
for (int i = 0; i < nLen; ++i)    //初始化計數個數
    {
        
++pnCount[npIndex[i]];
    }

    
for (int i = 1; i < 10++i)  //確定不大于該位置的個數。
    {
        pnCount[i] 
+= pnCount[i - 1];
    }

    
int * pnSort  = (int*)malloc(sizeof(int* nLen);    //存放零時的排序結果。

    
//注意:這里i是從nLen-1到0的順序排序的,是為了使排序穩定。
    for (int i = nLen - 1; i >= 0--i)
    {
        
--pnCount[npIndex[i]];        
        pnSort[pnCount[npIndex[i]]] 
= npData[i];
    }

    
for (int i = 0; i < nLen; ++i)        //把排序結構輸入到返回的數據中。
    {
        npData[i] 
= pnSort[i];
    }
    free(pnSort);                        
//記得釋放資源。
    free(pnCount);
    
return 1;
}

//基數排序
int RadixSort(int* nPData, int nLen)
{
    
//申請存放基數的空間
    int* nDataRadix    = (int*)malloc(sizeof(int* nLen);

    
int nRadixBase = 1;    //初始化倍數基數為1
    bool nIsOk = false//設置完成排序為false

    
//循環,知道排序完成
    while (!nIsOk)
    {
        nIsOk 
= true;
        nRadixBase 
*= 10;
        
for (int i = 0; i < nLen; ++i)
        {
            nDataRadix[i] 
= nPData[i] % nRadixBase;
            nDataRadix[i] 
/= nRadixBase / 10;
            
if (nDataRadix[i] > 0)
            {
                nIsOk 
= false;
            }
        }
        
if (nIsOk)        //如果所有的基數都為0,認為排序完成,就是已經判斷到最高位了。
        {
            
break;
        }
        RadixCountSort(nDataRadix, 
10, nPData, nLen);
    }

    free(nDataRadix);

    
return 1;
}

int main()
{
    
//測試基數排序。
    int nData[10= {123,5264,9513,854,9639,1985,159,3654,8521,8888};
    RadixSort(nData, 
10);
    
for (int i = 0; i < 10++i)
    {
        printf(
"%d ", nData[i]);
    }
    printf(
"\n");

    system(
"pause");
    
return 0;
}

 


posted on 2009-04-24 21:36 shongbee2 閱讀(13432) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構和算法

評論

# re: 基數排序[未登錄] 2012-06-02 10:01 MICHAEL

你的這個程序有一定的問題
比如這組數據:
int nData[10] = {1046,2084,9046,12074,56,7026,8099,17059,33,1};
  回復  更多評論   

# re: 基數排序 2013-06-28 13:49 hum

試了下,確實有點問題,修改一下就好了。
修改前
if (nDataRadix[i] > 0)
{
nIsOk = false;
}
修改后:
if (nPData[i]/nRadixBase > 0)
{
nIsOk = false;
}  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜激情免费视频| 国产日韩欧美麻豆| 亚洲国产日韩一级| 亚洲午夜一区二区三区| 日韩视频在线一区| 国产精品99久久久久久久vr| 一区二区日韩伦理片| 亚洲视频综合| 欧美一区二区三区男人的天堂| 亚洲欧美日韩专区| 久久精品国产精品 | 一区视频在线播放| 黄色成人在线免费| 亚洲国产三级网| 99成人免费视频| 午夜伦欧美伦电影理论片| 欧美亚洲免费在线| 久久综合久久综合久久| 欧美激情视频一区二区三区不卡| 欧美风情在线| 亚洲一区国产视频| 久久久777| 欧美精品午夜视频| 国产欧美日韩视频在线观看 | 久久另类ts人妖一区二区| 欧美福利电影在线观看| 一区二区激情视频| 久久久久久久综合狠狠综合| 欧美片第1页综合| 国产日韩在线一区二区三区| 亚洲每日更新| 久久久久一区二区三区四区| 亚洲精品日韩欧美| 久久影视精品| 欧美三级不卡| 亚洲精品1区2区| 欧美亚洲在线视频| 亚洲黄色影片| 久久视频在线免费观看| 国产精品入口66mio| 亚洲精品在线免费观看视频| 久久国产精彩视频| 一本色道久久综合亚洲二区三区| 久久久噜噜噜久久人人看| 国产精品欧美激情| 宅男噜噜噜66一区二区 | 久久国产精品久久久| 欧美日韩少妇| 亚洲人午夜精品| 久久精品水蜜桃av综合天堂| aa级大片欧美| 欧美日韩午夜| 亚洲人成人99网站| 免费欧美电影| 久久琪琪电影院| 精品动漫一区| 美日韩在线观看| 久久久精品2019中文字幕神马| 国产精品美女久久久久av超清 | 伊人久久久大香线蕉综合直播 | 国语自产在线不卡| 久久国产66| 香港成人在线视频| 国产精品狼人久久影院观看方式| 99国产精品自拍| 亚洲理论电影网| 欧美日韩一区在线观看| 宅男精品视频| 亚洲永久免费精品| 国产日韩欧美一区在线 | 欧美激情一区二区三区| 日韩视频在线免费| 在线视频欧美一区| 国产精品永久免费在线| 久久精品动漫| 亚洲乱码国产乱码精品精| 国产精品第2页| 麻豆视频一区二区| 国产精品99久久久久久久久久久久| 美女999久久久精品视频| 在线观看视频免费一区二区三区| 美女精品自拍一二三四| 男人天堂欧美日韩| 亚洲视频观看| 欧美一区二区三区四区在线观看地址 | 欧美日韩亚洲91| 亚洲一区激情| 欧美影片第一页| 91久久夜色精品国产网站| 亚洲精品综合精品自拍| 国产欧美日韩精品专区| 欧美wwwwww| 欧美性感一类影片在线播放| 性8sex亚洲区入口| 久久全国免费视频| 亚洲特色特黄| 久久九九99视频| 一区二区电影免费观看| 欧美在线观看视频在线| 日韩一级黄色av| 久久精品91| 亚洲网站在线观看| 久久久www成人免费毛片麻豆| 亚洲毛片视频| 久久久www成人免费无遮挡大片| 亚洲一区二区在线看| 久久伊伊香蕉| 欧美在线免费视频| 久久精品国产清高在天天线| 欧美xart系列高清| 久久国产精品久久精品国产| 欧美另类一区| 欧美激情第二页| 国产精品视频精品视频| 免费视频一区二区三区在线观看| 国产精品久久久久久久9999| 欧美成人伊人久久综合网| 国产拍揄自揄精品视频麻豆| 99国产一区二区三精品乱码| 亚洲国产精品高清久久久| 欧美一区二区观看视频| 午夜视频一区在线观看| 欧美日韩国产高清| 欧美激情网站在线观看| 精品不卡视频| 久久久国产精品亚洲一区| 欧美在线视频不卡| 国产精品一区久久久久| 一本色道久久综合狠狠躁篇怎么玩| 国产一二精品视频| 国产女主播视频一区二区| 日韩视频一区二区在线观看 | 欧美日韩小视频| 亚洲欧洲精品一区二区三区不卡| 激情成人亚洲| 久久久国产成人精品| 久久蜜臀精品av| 国产真实久久| 久久精品国产欧美激情 | 一卡二卡3卡四卡高清精品视频| 亚洲人成啪啪网站| 欧美黄色大片网站| 亚洲国产精品悠悠久久琪琪| 91久久精品一区二区三区| 免费在线成人| 亚洲理论在线观看| 午夜精品一区二区三区电影天堂 | 在线成人免费观看| 玖玖视频精品| 亚洲精品人人| 欧美在线观看一区二区| 国产午夜精品美女毛片视频| 久久精品视频免费| 欧美国产第二页| 亚洲色诱最新| 国产精品日韩欧美一区二区| 欧美一区中文字幕| 美国十次成人| 99精品视频一区二区三区| 国产精品高潮久久| 欧美亚洲日本国产| 牛夜精品久久久久久久99黑人| 亚洲激情第一页| 欧美日韩精品免费观看视频| 亚洲男人的天堂在线观看 | 亚洲网站在线| 欧美色图首页| 香蕉久久精品日日躁夜夜躁| 久久性天堂网| 亚洲深爱激情| 永久555www成人免费| 欧美美女bb生活片| 欧美一进一出视频| 亚洲精品欧美| 亚洲男人影院| 91久久国产精品91久久性色| 国产精品毛片大码女人| 蜜桃视频一区| 亚洲欧美一区二区三区在线| 欧美激情一区二区三区| 欧美一区二区视频观看视频| 最新日韩精品| 国产麻豆成人精品| 欧美精品在线观看播放| 久久久久久9| 亚洲午夜电影在线观看| 亚洲黄色免费网站| 久久手机免费观看| 性亚洲最疯狂xxxx高清| 日韩午夜免费视频| 亚洲大胆女人| 国内自拍亚洲| 国产美女精品视频免费观看| 亚洲久久一区| 欧美成人国产一区二区| 欧美在线中文字幕| 午夜精品福利一区二区三区av| 亚洲理论在线观看| 精品成人国产在线观看男人呻吟| 国产精品久久久久久久久免费桃花 |