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

隨感而發

雜七雜八

統計

留言簿(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 閱讀(13435) 評論(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精品国产高清一区二区| 欧美国产日韩xxxxx| 亚洲久久一区二区| 99视频精品全部免费在线| 老司机aⅴ在线精品导航| 欧美成人一区二区三区在线观看 | 一区二区三区导航| 亚洲综合日韩在线| 在线国产精品播放| 亚洲九九爱视频| 国产精品爽爽ⅴa在线观看| 久久久久久久久久看片| 美女露胸一区二区三区| 亚洲女性喷水在线观看一区| 欧美在线观看视频| 一区二区高清视频| 欧美综合国产| 一区二区三区久久久| 久久精品国产在热久久 | 欧美日一区二区在线观看| 久久国产欧美日韩精品| 欧美激情视频给我| 久久综合久色欧美综合狠狠 | 一本久道久久综合狠狠爱| 国产性色一区二区| 日韩小视频在线观看| 黄色一区二区在线| 亚洲一区二区三区精品在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 夜夜嗨网站十八久久| 亚洲欧洲午夜| 久久久久久久综合狠狠综合| 亚洲综合色网站| 欧美人与禽猛交乱配| 欧美成人国产| 国产综合自拍| 午夜国产精品影院在线观看| 中文精品一区二区三区 | 亚洲少妇自拍| 日韩一级黄色片| 欧美a级大片| 免费一级欧美片在线观看| 国产日韩欧美不卡| 亚洲综合日本| 欧美一区二区播放| 国产精品久久久久9999高清| 99精品视频网| 一区二区高清在线| 欧美日本亚洲韩国国产| 亚洲国产精品第一区二区三区| 国产精品永久免费观看| 亚洲一级二级在线| 亚洲一级影院| 国产精品入口夜色视频大尺度| 99av国产精品欲麻豆| 夜夜爽夜夜爽精品视频| 欧美日韩999| 99re6热在线精品视频播放速度| 一区二区精品在线| 欧美少妇一区| 亚洲欧美99| 久久男人资源视频| 亚洲二区在线视频| 欧美成人dvd在线视频| 91久久午夜| 亚洲欧美电影院| 国产性猛交xxxx免费看久久| 久久精品国产清高在天天线| 麻豆精品视频在线观看| 亚洲人成网站色ww在线| 欧美久久精品午夜青青大伊人| 亚洲理伦在线| 欧美在线观看一区| 亚洲电影免费观看高清完整版在线观看 | 西西人体一区二区| 国内精品久久久| 久久综合九色| 夜夜狂射影院欧美极品| 久久精品视频va| 亚洲激情小视频| 国产精品国产a| 午夜宅男久久久| 亚洲国产美国国产综合一区二区 | 国产精品乱码| 翔田千里一区二区| 欧美激情亚洲另类| 亚洲欧美国产日韩天堂区| 国产一区在线播放| 欧美精品99| 久久gogo国模裸体人体| 亚洲国产一区二区视频| 欧美一区二区三区在线播放| 在线观看一区视频| 欧美亚洲成人网| 久久久伊人欧美| 亚洲一区二区在线免费观看视频 | 欧美在线视频免费| 日韩亚洲欧美成人| 国语自产精品视频在线看一大j8 | 欧美视频在线观看一区二区| 久久精品国产v日韩v亚洲| 亚洲老司机av| 久久亚洲一区| 亚洲男人的天堂在线观看| 亚洲第一伊人| 国产一区91| 国产精品久久久久av免费| 欧美成人一区二区| 久久久久综合网| 亚洲欧美日韩一区二区三区在线| 亚洲国产成人精品久久久国产成人一区| 午夜久久黄色| 亚洲视频一起| 日韩天天综合| 最新国产拍偷乱拍精品| 韩国女主播一区二区三区| 国产精品美女在线| 欧美体内谢she精2性欧美| 欧美成人一品| 欧美成年人网| 毛片精品免费在线观看| 久久精品中文字幕免费mv| 午夜激情综合网| 亚洲午夜小视频| 一区二区电影免费在线观看| 亚洲黄色有码视频| 亚洲第一精品影视| 欧美激情成人在线| 欧美激情久久久久| 欧美88av| 欧美激情一区二区三区在线| 嫩草伊人久久精品少妇av杨幂| 欧美资源在线观看| 欧美一区91| 久久久91精品国产一区二区精品| 欧美在线视频a| 久久精品卡一| 久久亚洲影音av资源网| 久久在线免费观看视频| 久久野战av| 欧美激情精品久久久六区热门| 欧美国产日本| 亚洲国产精品99久久久久久久久| 欧美成人r级一区二区三区| 欧美成人第一页| 亚洲精品国产精品国自产观看| 亚洲精品乱码久久久久久| 亚洲美女av黄| 亚洲综合精品一区二区| 欧美在线看片| 麻豆亚洲精品| 欧美三区视频| 国产一区二区| 亚洲欧洲在线视频| 亚洲中无吗在线| 欧美在线关看| 欧美激情亚洲视频| 国产精品99久久久久久久久| 欧美一站二站| 欧美精品乱人伦久久久久久| 国产精品久久久一本精品| 国产一区二区三区成人欧美日韩在线观看 | 一本色道久久精品| 久久超碰97中文字幕| 免费高清在线视频一区·| 欧美小视频在线观看| 国产在线观看91精品一区| 亚洲高清视频的网址| 亚洲夜晚福利在线观看| 久久久久久999| 91久久精品国产91久久性色tv| 亚洲一区二区高清视频| 另类综合日韩欧美亚洲| 国产精品理论片| 亚洲人成在线观看网站高清| 亚洲欧美日韩在线| 欧美国产先锋| 性做久久久久久久久| 欧美片在线观看| 在线播放精品| 欧美一级在线播放|